selenium Webdriver多窗口切换

mac2022-07-01  6

应用场景:

在页面操作过程中有时候点击某个链接会弹出新的窗口,这时候就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法,可以实现在不同的窗口直接切换。 以百度首页和百度注册页为例,在两个窗口直接的切换如图

 

代码如下:

1 #导包 2 from selenium import webdriver 3 from time import sleep 4 #定义浏览器句柄,打开百度网址 5 driver=webdriver.Chrome() 6 driver.implicitly_wait(10) 7 url="http://www.baidu.com" 8 driver.get(url) 9 #窗口最大化 10 driver.maximize_window() 11 #获取百度搜索窗口的句柄 12 seach_windows=driver.current_window_handle 13 #打印百度搜索窗口的句柄 14 print(seach_windows) 15 #点击右上角"登录"按钮 16 driver.find_element_by_link_text("登录").click() 17 #在弹窗中点击"立即注册"按钮 18 driver.find_element_by_xpath('//*[@id="passport-login-pop-dialog"]/div/div/div/div[4]/a').click() 19 #获取当前所有打开窗口的句柄 20 all_handles=driver.window_handles 21 #进入注册窗口 22 for newhandle in all_handles: 23 if newhandle!=seach_windows: 24 driver.switch_to.window(newhandle) 25 print('now register window!') 26 sleep(1) 27 #输入用户名:username12334 28 driver.find_element_by_id("TANGRAM__PSP_4__userName").send_keys("username12334") 29 #输入手机号:18877776666 30 driver.find_element_by_id("TANGRAM__PSP_4__phone").send_keys("18877776666") 31 #输入密码:password 32 driver.find_element_by_id("TANGRAM__PSP_4__password").send_keys("password") 33 #点击获取语音验证码 34 driver.find_element_by_id("TANGRAM__PSP_4__verifyCodeSend").click() 35 #输入验证码:123456 36 driver.find_element_by_id("TANGRAM__PSP_4__verifyCode").send_keys("123456") 37 #勾选(阅读并接受《百度用户协议》及《百度隐私权保护声明》) 38 driver.find_element_by_id("TANGRAM__PSP_4__isAgree").click() 39 #点击"注册"按钮 40 driver.find_element_by_id("TANGRAM__PSP_4__submit").click() 41 #回到百度搜索窗口 42 for newhandle in all_handles: 43 if newhandle==seach_windows: 44 driver.switch_to.window(newhandle) 45 print('now seach window!') 46 sleep(1) 47 #关闭登录/立即注册的弹窗 48 driver.find_element_by_id("TANGRAM__PSP_4__closeBtn").click() 49 #点击百度输入框,输入"selenium webdriver" 50 driver.find_element_by_xpath('//input[@id="kw"]').send_keys("selenium webdriver") 51 #点击"百度一下"按钮 52 driver.find_element_by_xpath('//input[@id="su"]').click() 53 sleep(2) 54 #关闭所有窗口,退出浏览器,结束本次脚本任务 55 driver.quit()   脚本执行过程:首先打开百度首页,通过current_window_handle获得当前窗口的句柄,并赋值给变量seach_windows 接着打开登录窗口,在登录弹窗上单击“立即注册”,从而打开新的注册窗口。通过window_handles获取当前打开的所有窗口的句柄,并赋值给变量all_handles  第一个for循环遍历了all_handles,如果newhandle不等于seach_windows,那么一定是注册窗口,因为脚本执行过程中只打开了两个窗口。所以,通过switch_to.window()切换到注册页面进行注册操作。第二个for循环类似,不过这一次判断如果newhandle等于seach_windows,那么切换到百度搜索页,然后进行搜索操作。 总结: current_window_handle:获取当前窗口的句柄 window_handles:返回所有窗口的句柄到当前会话 switch_to.window():用于切换到相应的窗口,与switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ talk is cheap,show me the code.  

 

转载于:https://www.cnblogs.com/chenshengkai/p/11298036.html

相关资源:25个经典网站源代码
最新回复(0)