在平时打开浏览器页面时,点击会调转另一个页面,这时需要用到windows来继续自动化操作。首先要获取页面当前句柄,如下例子,这里就打开了两个窗口页面
- 用代码获取句柄并打印
#打开浏览器
driver = webdriver.Chrome()
# 打开百度
driver.get("https://baidu.com")
# 最大化窗口
driver.maximize_window()
#鼠标移到“更多”
gd=driver.find_element_by_xpath('//a[text()="更多"]')
#实例化ActionChains类
ac = ActionChains(driver)
#将鼠标移动到“更多”
ac.move_to_element(gd)
#调用perform执行命令
ac.perform()
#鼠标移到“学术”并点击
driver.find_element_by_link_text("学术").click()
time.sleep(3)
#切换到学术页面,判断当前句柄
handles=driver.window_handles
print(handles)
接下来我们就可以切换到新生的页面,继续操作下一步
#切换到学术页面,判断当前句柄
handles=driver.window_handles
- 在新增的页面中,有时候会涉及弹窗的处理
#点击弹窗“我知道了”
driver.find_element_by_xpath('//*[@id="line_content"]/div[1]/div/div[1]/div[5]/span').click()
# #点击学术页面的设置
driver.find_element_by_xpath('//a[text()="设置"]').click()
#选择搜索设置
driver.find_element_by_xpath('//*[@id="setpref"]').click()
- 在这里会用到一个下拉框选择的类Select
from selenium.webdriver.support.ui import Select #引入类
#定位下拉列表元素
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'nr')))
xlk = driver.find_element_by_id("nr")
#通过下标选择(从0开始)select_by_index(index)
time.sleep(2)
Select(xlk).select_by_index(2) #选50条
#通过value属性 select_by_value(value值)
time.sleep(2)
Select(xlk).select_by_value("10") #选20条
#通过文本内容 select_by_visible_text(文本内容)
time.sleep(2)
Select(xlk).select_by_visible_text("每页显示20条")#选10条
- 还有警告框的处理alert.dismiss()和alert.accept()
#点击保存设置,打印当前警告窗口内容
driver.find_element_by_xpath('//a[text()="保存设置"]').click()
time.sleep(2)
alert = driver.switch_to.alert #或者可以用alert=driver。switch_to_aler
print(alert.text)#text后面不用加(),会报错str类型不对
# #取消弹出框
# #alert.dismiss()
#确定弹出框
alert.accept()