1、switch_to_window使用踩坑
switch_to_window,其主要被用来切换窗口。
踩坑情景
使用python + selenium爬取csdn博客,由于有些博客点击里面内容后会打开新的页面,使用close()关闭新打开的标签页后,使用switch_to_window切换到原本的博客窗口,但是是使用如下方法:
browser.switch_to_window(browser.window_handles[-1])
这段代码的含义是,切换窗口到当前所有窗口的最后一个窗口。然而在代码运行时可能会出现一些错误,比如:
selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
错误提示为目标窗口已经关闭了,这是实际窗口和代码中预设窗口不一致导致的。
解决方案
使用更为精确的目标窗口进行切换。
例如:当前有博客标签页和新打开的标签页,我们关闭新打开的标签页后要切换到博客标签页,就通过之前设定的博客窗口句柄进行切换。
# 在进入博客标签页后就标记当前的窗口句柄
blog_handle = browser.current_window_handle
#其他代码,省略
......
# 在关闭新打开的标签页,切换回博客标签页时,使用之前标记好的窗口句柄进行切换
browser.switch_to_window(blog_handle)
结果,代码顺利运行,没有出现上面的错误。
注意:在访问过程中切换进新打开的页面可以直接使用browser.switch_to_window(browser.window_handles[-1])
进行切换,例如从csdn中的作者专栏页面,通过点击作者专栏页面的博客进入博客页面,此时将浏览器窗口切换到博客页面就可以使用代码browser.switch_to_window(browser.window_handles[-1])
进行切换,但是从博客页面切换回作者专栏页面就需要采用之前介绍的方法,根据之前标记好的窗口句柄进行精确切换