python - selenium新建了5个标签页但是通过window_handles只能获取一个句柄是怎么回事?

 岁月静好198838 发布于 2022-10-29 20:43

大家好,我刚开始学习使用selenium写一个操作浏览器的小脚本。
我想在一个火狐浏览器窗口下新开n个标签页,我在网上查到可以使用键盘事件:Keys.CONTROL + 't'实现,确实能够生效。
但问题是,接下来我需要操作这些新打开的标签页,网上的方法是通过driver.window_handles获取句柄。按道理说六个tab应该获取6个句柄,但是我输出发现始终只有一个句柄,我的代码如下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox() # 默认的火狐浏览器

for i in range(5):
    # 这句代码相当于在浏览器窗口下按下ctrl+t打开一个新的标签页
    driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
    
handles = driver.window_handles
print(len(handles))
print(handles)

输出:
1
['{1deb296c-6cdc-4838-b143-1ee67ae0effd}']

只有一个句柄,因此我无法操作全部的tabs

谁能指点我一下其中的原因?或者提供一种可以新建n个标签页并且能够不断切换和操作它们的方法,谢谢大家!

1 个回答
  • 最近我也使用selenium,也是遇到这个问题打开新的窗口,使用window_handles无法获取全部句柄。
    思考两天,找了大量资料。。。再一次运行我的脚本时,我发现我的那个新窗口还没有完全打开(说的不准确,因为不知道如何描述这个),所以可以
    添加休眠时间,也可以使用别的方法,判断新的窗口是否已经完全打开,比sleep要精确

    **import time**
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    driver = webdriver.Firefox() # 默认的火狐浏览器
    for i in range(5):
        # 这句代码相当于在浏览器窗口下按下ctrl+t打开一个新的标签页
        driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
    time.sleep(10)#等待所有窗口完全打开,10秒够用了, 不好用就判断新窗口是否完全打开  
    handles = driver.window_handles
    print(len(handles))
    print(handles)
    
    2022-10-31 18:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有