zoukankan      html  css  js  c++  java
  • python3+selenium入门11-窗口切换

    在打开新的浏览器窗口时,如果要定位新窗口的元素,需要先切换到这个新打开的窗口中,才能定位到该窗口下的元素。

    current_window_handle:获取当前句柄。可以把句柄理解成窗口的身份证

    window_handles:获取所有打开窗口的句柄

    from selenium import webdriver
    import time
    
    dr = webdriver.Chrome()
    dr.get('https://www.baidu.com')
    dr.maximize_window()
    win_handle = dr.current_window_handle#获取当前窗口句柄
    print(win_handle)
    js = 'window.open("http://news.baidu.com")'#js打开新窗口
    dr.execute_script(js)#执行js
    handles = dr.window_handles#获取所有窗口句柄
    for i in handles:
        if i != win_handle:#如果句柄不是当前窗口的句柄
            dr.switch_to.window(i)#切换窗口
    ww = dr.find_element_by_id('ww')#新闻页面的搜索输入框
    ww.send_keys('selenium')
    time.sleep(2)
    dr.switch_to.window(win_handle)#切换到百度首页的句柄
    tr = dr.find_element_by_id('kw')#百度首页搜索框
    tr.send_keys('selenium')
    dr.quit()

    ​这是打印出来的句柄

    因为使用WebDriver点击百度新闻不会新打开一个页面,所以就通过js来模拟打开一个新网页了。通过循环所有句柄,当句柄不是当前窗口的句柄,就切换到这个窗口去。

    from selenium import webdriver
    import time
    
    dr = webdriver.Chrome()
    dr.get('https://www.baidu.com')
    dr.maximize_window()
    js = 'window.open("http://news.baidu.com")'
    dr.execute_script(js)
    handles = dr.window_handles#获取所有窗口句柄
    dr.switch_to.window(handles[1])
    ww = dr.find_element_by_id('ww')#新闻页面的搜索输入框
    ww.send_keys('selenium')
    time.sleep(2)
    dr.switch_to.window(handles[0])
    tr = dr.find_element_by_id('kw')#百度首页搜索框
    tr.send_keys('selenium')
    dr.quit()

    所有窗口句柄是一个数组,可以通过数组的下标来访问相应的句柄,默认是按照打开窗口的顺序存的。

  • 相关阅读:
    JNI 反射
    JNI 动态注册
    Nt* 与 Zw* 区别
    python之线程
    爬虫框架之Scrapy(四 ImagePipeline)
    初试PySnooper
    爬虫框架之Scrapy(三 CrawlSpider)
    爬虫框架之Scrapy(二)
    爬虫框架之Scrapy(一)
    selenium+谷歌无头浏览器爬取网易新闻国内板块
  • 原文地址:https://www.cnblogs.com/myal/p/9378992.html
Copyright © 2011-2022 走看看