1. 多表单切换
WebDriver只能在一个页面上对元素进行识别和定位,无法直接定位frame/iframe表单内嵌页面上的元素,这是就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面
通过switch_to.frame()切换表单
通过switch_to.default_content()回到最外层的页面
from time import sleep from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.126.com") driver.maximize_window() sleep(2) driver.find_element_by_link_text("密码登录").click() login_frame = driver.find_element_by_css_selector("iframe[id^=x-URS-iframe]") driver.switch_to.frame(login_frame) driver.find_element_by_name("email").send_keys("[email protected]") driver.find_element_by_name("password").send_keys("123456") driver.find_element_by_id("dologin").click() driver.switch_to.default_content()
2 多窗口切换
current_window_handle:获得当前窗口
子主题 1
window_handles:返回所有窗口的句柄到当前会话
switch_to.window():切换到相应的窗口
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
# 获得当前窗口句柄
search_window = driver.current_window_handle
driver.find_element_by_link_text("登录").click()
driver.implicitly_wait(5)
driver.find_element_by_link_text("立即注册").click()
# 获得当前所有窗口句柄
all_handles = driver.window_handles
# 进入注册窗口进行操作
for handle in all_handles:
if handle != search_window:
driver.switch_to.window(handle)
print(driver.title)
driver.find_element_by_name("userName").send_keys("usename")
driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_4__phone']").send_keys("134XXXXXXXX")
driver.close()
driver.switch_to.window(search_window)
print(driver.title)
driver.quit()
3 警告框处理
在WebDriver中处理Javascript生成的alert、confirm、prompt,使用switch_to.alert方法定位,然后使用text、accept、dismiss、send_keys等进行操作
text:返回alert、confirm、prompt中的文字信息
accept():接收现有警告框
dismiss():解散所有警告框
send_keys():在警告框中输入文本(如果可以输入文本的话)
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
driver.find_element_by_link_text("设置").click()
driver.find_element_by_link_text("搜索设置").click()
sleep(2)
driver.find_element_by_class_name("prefpanelgo").click()
# 获取警告框
alert = driver.switch_to.alert
text = alert.text
print(text)
# 接受警告框
alert.accept()
driver.quit()
4 下拉框处理
WebDriver提供了Select类来处理下拉框
导入Select类:
from selenium.webdriver.support.select import Select
Select类:用于定位<select>标签
select_by_value():通过value值定位下拉框选项
select_by_visible_text():通过text值定位下拉选项
select_by_index():根据下拉框的索引进行选择。第一个选项为0,第二个选项为1
from time import sleep from selenium import webdriver from selenium.webdriver.support.select import Select driver = webdriver.Chrome() driver.get("http://www.baidu.com") link = driver.find_element_by_link_text("设置").click() driver.find_element_by_link_text("搜索设置").click() sleep(2) sel = driver.find_element_by_xpath("//select[@id='nr']") sleep(2) Select(sel).select_by_value("50") sleep(2) Select(sel).select_by_index("1") sleep(2) Select(sel).select_by_visible_text("每页显示10条")
5 窗口截图
WebDriver提供了截图函数save_screenshot(),可以用来截取当前窗口
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com")
# 截取当前窗口 driver.save_screenshot("./baidu.png") driver.quit()