• 在点击链接后有时候会在新窗口打开,如果不切换窗口,也无法获取新窗口的东西,即使新窗口打开了, 这时候,我们的 WebDriver对象对应的 还是老窗口,自动化操作也还是在老窗口进行,所以我们要做的就是窗口切换。

首先导入库和导入驱动

from time import sleep
from selenium import webdriver

# 无头浏览器设置
co = webdriver.ChromeOptions()
co.headless = False
browser = webdriver.Chrome(options=co)

打开网页并点击链接

browser.implicitly_wait(3)
url = 'http://f.python3.vip/webauto/sample3.html'
browser.get(url)

sleep(1)
browser.find_element_by_tag_name('a').click()

变量保存当前窗口的句柄并查找新打开网页的句柄

WebDriver对象有window_handles 属性,这是一个列表对象, 里面包括了当前浏览器里面所有的窗口句柄

  • 所谓句柄,大家可以想象成对应网页窗口的一个ID

首先保存当前窗口的句柄,以便我们可以在后续切换回来

mainWindows = browser.current_window_handle

然后使用for循环查找新打开网页的句柄

for handle in browser.window_handles:
    browser.switch_to.window(handle)
    if 'Bing' in browser.title:
        break

我们依次获取 wd.window_handles 里面的所有 句柄 对象, 并且调用 wd.switch_to.window(handle) 方法,切入到每个窗口。

找到目标窗口后,我们使用switch_to.window()切换到目标窗口

然后可以选择切换到自己的窗口

sleep(1)
browser.switch_to.window(mainWindows)

关闭浏览器结束程序

sleep(2)
browser.quit()

完整demo

"""
窗口切换
"""
from time import sleep
from selenium import webdriver

# 无头浏览器设置
co = webdriver.ChromeOptions()
co.headless = False
browser = webdriver.Chrome(options=co)

browser.implicitly_wait(3)
url = 'http://f.python3.vip/webauto/sample3.html'
browser.get(url)

sleep(1)
browser.find_element_by_tag_name('a').click()
mainWindows = browser.current_window_handle
for handle in browser.window_handles:
    browser.switch_to.window(handle)
    if 'Bing' in browser.title:
        break
sleep(1)
browser.switch_to.window(mainWindows)
sleep(1)
browser.find_element_by_id('outerbutton').click()

sleep(2)
browser.quit()
最后修改:2020 年 04 月 07 日
如果觉得我的文章对你有用,请随意赞赏