selenium 点击按钮,打开新标签页后,无法定位新标签页的元素

使用selenium爬取页面时,在弹出浏览器界面上我们明明看到已经自动到达新标签页,却无法定位新标签页的元素

原因:实际上程序并没有随浏览器上所看的标签页改变而改变,也就是说我们在浏览器上看到已经到达标签2,实际上程序默认的还是标签1

解决方案:

    browser.switch_to_window(self.browser.window_handles[1])

    说明:这里“1”是可变的,是你将要去往标签页的索引;从第一个标签页跳转到第二个标签页,且索引从0开始,所以定位第二个标签页的索引就为1的咯

 

### 使用 Selenium 打开新标签页 当使用 Selenium 进行自动化测试或网页抓取时,有时需要在一个新的浏览器标签页中加载不同的 URL 或者执行其他操作。以下是几种实现这一目标的方法。 #### 方法一:通过发送键盘组合键 Ctrl + T 来创建新标签页 这种方法模拟了用户按下 Ctrl 和字母 t 的行为来触发浏览器新建标签的功能。具体代码如下所示: ```python import time from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.get("http://example.com") # 发送 Ctrl + t 组合键以开启一个新的标签页 driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't') time.sleep(2) # 切换至最新打开的那个窗口/标签页 new_window_handle = driver.window_handles[-1] driver.switch_to.window(new_window_handle) ``` 此方式简单直观,但依赖于特定操作系统下的快捷键设置[^2]。 #### 方法二:利用 JavaScript 注入的方式启动新标签页 另一种更为通用的做法是借助 WebDriver 提供的 `execute_script` 函数注入一段简单的 JS 脚本来完成同样的事情: ```python import time from selenium import webdriver driver = webdriver.Chrome() driver.get("http://example.com") # 使用JavaScript语句 window.open() 创建一个空白的新标签页 driver.execute_script("window.open();") time.sleep(2) # 获取当前所有已知窗口句柄列表,并切换到最后一个即新开的标签页上 handles = driver.window_handles latest_handle = handles[len(handles)-1] driver.switch_to.window(latest_handle) ``` 这种方式不局限于任何平台上的默认热键配置,因此具有更好的跨平台兼容性[^4]。 #### 方法三:直接调用 Chrome DevTools Protocol (CDP) API 实现更底层控制 对于高级开发者来说,还可以考虑采用 CDP 接口来进行更加精细的操作。不过这通常涉及到更多复杂的编程细节以及对 Chromium 内部机制的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值