多窗口处理

"""
1、打开淘宝
2、点击聚划算
3、退回返回淘宝页面

句柄(handler):每一个页面都有一个值,对于页面来说是唯一的,是页面的一个标识
driver:是绑定句柄页面,只能控制绑定的页面

获取当前窗口的句柄:driver.current_window_handle

拿到聚划算的句柄
driver.window_handles----->拿到所有的句柄


"""

from selenium import webdriver
import time

driver =webdriver.Chrome()
driver.get("https://www.taobao.com")

handler1 =driver.current_window_handle
print(handler1)

# driver.find_element_by_xpath("//*[@id='q']").send_keys("女装大佬")
# driver.find_element_by_xpath("//*[@id='J_TSearchForm']/div[1]/button").click()

# 点击聚划算
driver.find_element_by_link_text("聚划算").click()
time.sleep(2)

handler2 =driver.window_handles
# 将聚划算的句柄绑定给driver
driver.switch_to_window(handler2[1])

# # 选择女装,进入女装页面
# driver.find_element_by_link_text("女装").click()
# time.sleep(2)
#
# handler22 =driver.window_handles
# print(handler22)

driver.back()
time.sleep(2)

# 关闭当前窗口
driver.close()

鼠标事件

"""
鼠标事件
from selenium.webdriver.common.action_chains import ActionChains

常用方法:
perform():执行所有ActionChains中存储的行为
context_click():右击
double_click():双击
drag_and_drop():拖动
move_to_element():鼠标悬停
"""
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains

driver =webdriver.Chrome()
driver.get("https://www.baidu.com")

# # 控制鼠标悬浮到“设置”按钮上
# setButton =driver.find_element_by_link_text("更多")

# # 将设置按钮的操作行为封装起来ActionChains,鼠标对象知道要干什么了
# ActionChains(driver).move_to_element(setButton).perform()
# time.sleep(2)

driver.maximize_window()

#在百度文本框中鼠标右键
webedit =driver.find_element_by_id("kw")
ActionChains(driver).context_click(webedit).perform()
time.sleep(2)
driver.quit()
"""
键盘事件:keys()类提供了键盘上的按键方法
需要导入以下的包:
from selenium.webdriver.common.keys import Keys  #  引入模块

label.send_keys("input输入的内容")

label.send_keys(Keys.BACK_SPACE)  # 退格键

label.send_keys(Keys.CONTRL,'a')  # 全选

label.send_keys(Keys.CONTRL,'v')  # 粘贴

label.send_keys(Keys.CONTRL,'c')  # 复制

label.send_keys(Keys.CONTRL,'x‘’) # 剪切

label.send_keys(Keys.ENTER)   # 回车

键盘事件的案例:
1、百度“seleniumm”
2、删除多输入的m
3、再输入“ 空格 教程”
4、ctrl+a,
5、ctrl+x,
6、ctrl+v,
7、回车代替单机,完成搜索
8、退出浏览器

"""

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver =webdriver.Chrome()
driver.get("https://www.baidu.com")

# 1、百度“seleniumm”
driver.find_element_by_id("kw").send_keys("seleniumm")
time.sleep(1)

# 2、删除多输入的m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
time.sleep(1)
# 3、再输入“ 空格 教程”
driver.find_element_by_id("kw").send_keys(" 教程")
time.sleep(1)
# 4、ctrl+a,
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
time.sleep(1)
# 5、ctrl+x,
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
time.sleep(1)
# 6、ctrl+v,
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
time.sleep(1)
# 7、回车代替单机,完成搜索
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
time.sleep(1)
# 8、退出浏览器
driver.quit()

警告框处理

"""

模式窗口:只有你关闭这个窗口,其他操作做不了
非模式窗口:不用关闭窗口,也可以其他操作

警告框——alter:是一个模式框
1、driver对象是一个当前页面窗口内,但是不在alter上,并且没办法定位窗口上的元素
2、driver.switch_to.alter():暂时将driver对象交给alter用
3、可以对alter警告窗口做什么事情:
text:返回(获取)alter/confirm/prompt中的文字信息
accept():接收现有警告框,就是点他的确定按钮
dismiss():放弃现有警告框,取消
send_keys(keysToSend):发送文本至警告框。

"""

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
import selenium.webdriver.support.ui as ui

driver =webdriver.Chrome()
driver.get("https://www.baidu.com")

driver.maximize_window()
Setbutton = driver.find_element_by_xpath("//*[@id='s-usersetting-top']")
# 将设置按钮封装当ActionChains中,但没有进行下一步操作
ActionChains(driver).move_to_element(Setbutton).perform()
time.sleep(1)
driver.find_element_by_link_text("搜索设置").click()

# 定位不到所给目标故采用  的方法进行求解
# 因为时间等待所以找不到
# 法一
# wait = ui.WebDriverWait(driver,10)
# wait.until(lambda driver: driver.find_element_by_xpath("//*[@id='nr_3']"))
# driver.find_element_by_xpath("//*[@id='nr_3']").click()
# 法二
time.sleep(2)
driver.find_element_by_xpath("//*[@id='nr_3']").click()
# 点击保存设置按钮,弹出一个警告框
driver.find_element_by_link_text("保存设置").click()
time.sleep(2)
# 进行操作
dd =driver.switch_to_alert()
time.sleep(2)

# 获取alert里面的文本信息
tt =dd.text
print(tt)
time.sleep(2)

# 接收(确认文本框)
dd.accept()

time.sleep(2)
driver.quit()