Python+selenium+webdriver 解决多窗口跳转后的当

系统 1851 0

描述: 通常我们selenium元素的时间经常遇到只要跳转页面了,定位就总是找不到我要找的元素,这是因为的你定位指针driver没有指向第二个页面,所以无法定位。知道原因后哪怎么来切换定位窗口呢,很简历。

通过下面语句可获取当前指定的窗口handle name,但是这里很多学者会觉得他获取的就是第二个页面的handle name,从页面显示可得知,其实错了,我也犯过这些的错。我们需要获取driver会话中的所有窗口的handle name,然后在列表中通过遍历切换想要指定的窗口就行了
 

            
              current_window = driver.current_window_handle  # 获取当前窗口handle name


            
          

 多页面产生后,通过遍历切换所要切换的窗口

            
              all_window=driver.window_handles    # 返回当前会话中所有窗口的句柄。
print("all_window:: ",all_window)   # 打印当前所有窗口的句柄 name
for window in all_window:           #通过遍历判断要切换的窗口
    print("window::  ",window)
    if window != current_window:
        driver.switch_to.window(window)     # 将定位焦点切换到指定的窗口,包含所有可切换焦点的选项
current_window = driver.current_window_handle   # 获取当前窗口handle name
            
          

举例: 以百度为例,跳转第二个窗口后操作第二个

            
              # coding:utf-8


from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')            #填入URL
driver.find_element_by_id("kw").send_keys("selenium")    #输入搜索内容
driver.find_element_by_id("su").click()        # 点击搜索按钮
time.sleep(4)                                  # 等待搜索后的内容
current_window = driver.current_window_handle  # 获取当前窗口handle name
print("current_window:: ",current_window)
driver.find_element_by_xpath("//*[@id='2']/h3/a").click()
time.sleep(3)                       # 等待第二个页面
all_window=driver.window_handles    # 返回当前会话中所有窗口的句柄。
print("all_window:: ",all_window)   # 打印当前所有窗口的句柄 name
for window in all_window:           #通过遍历判断要切换的窗口
    print("window::  ",window)      
    if window != current_window:
        driver.switch_to.window(window)     # 将定位焦点切换到指定的窗口,包含所有可切换焦点的选项
current_window = driver.current_window_handle   # 获取当前窗口handle name
print("current_window:: ",current_window)       # 打印当前窗口的句柄 name
driver.find_element_by_xpath("/html/body/div[4]/div[2]/div/div[2]/dl[1]/dd/a[1]").click()

            
          

日志打印输出结果:

            
              current_window::  CDwindow-B8D78AE0E2BE6E2DFC897241D4737563
all_window::  ['CDwindow-B8D78AE0E2BE6E2DFC897241D4737563', 'CDwindow-5E824943E381BDF6AE2B100CC60A0797']
window::   CDwindow-B8D78AE0E2BE6E2DFC897241D4737563
window::   CDwindow-5E824943E381BDF6AE2B100CC60A0797
current_window::  CDwindow-5E824943E381BDF6AE2B100CC60A0797

Process finished with exit code 0
            
          

通过日志输出是不是更加了解了窗口切换的元素定位了呢

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论