You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium无法打开新窗口/标签页问题求助

解决Selenium无法在新窗口打开表格元素链接的问题

看起来你遇到的核心问题其实不是Selenium的代码问题——手动操作都没法在新窗口打开这个链接,说明这个元素本身就不支持浏览器默认的「Shift+点击/右键新窗口打开」的行为,大概率是以下几种情况之一,我们逐个解决:

1. 先确认元素的真实结构

首先你得搞清楚这个表格元素到底是什么类型:

  • 打开浏览器开发者工具,定位到这个元素,看它是不是标准的<a>标签,有没有href属性;
  • 也可以用Selenium代码直接打印属性:
    tag_name = ele.get_attribute('tagName')
    href = ele.get_attribute('href')
    print(f"元素标签: {tag_name}, 链接地址: {href}")
    

如果输出的tag_name不是<a>,或者href是javascript:void(0)、#这类无效值,那浏览器自然无法识别它为可跳转的链接,Shift+Click肯定没用。

2. 针对非标准链接的解决方案

方案一:提取目标URL,手动打开新窗口

如果元素是通过JavaScript触发跳转(比如点击后执行window.location.href或者AJAX加载后跳转),你可以先提取出真实的目标URL,再用Selenium的JS API手动打开新窗口:

  • 先从元素的onclick属性里找跳转逻辑,比如:
    import re
    
    onclick_code = ele.get_attribute('onclick')
    # 假设onclick里有类似 window.location.href='https://xxx.com' 的代码
    url_match = re.search(r"window\.location\.href='(.*?)'", onclick_code)
    if url_match:
        target_url = url_match.group(1)
        # 打开新窗口
        driver.execute_script(f"window.open('{target_url}');")
        # 切换到新窗口
        driver.switch_to.window(driver.window_handles[-1])
        # 处理你的业务逻辑
        # ...
        # 关闭新窗口并切回原窗口
        driver.close()
        driver.switch_to.window(driver.window_handles[0])
    
  • 如果onclick里没有直接的URL,你可以模拟点击一次,记录跳转后的URL,再回退到原页面,之后用这个URL打开新窗口:
    original_handle = driver.current_window_handle
    original_url = driver.current_url
    
    # 点击元素触发跳转
    ele.click()
    # 获取跳转后的目标URL
    target_url = driver.current_url
    # 回退到原表格页面
    driver.back()
    
    # 手动打开新窗口处理
    driver.execute_script(f"window.open('{target_url}');")
    driver.switch_to.window(driver.window_handles[-1])
    # 处理页面...
    driver.close()
    driver.switch_to.window(original_handle)
    

方案二:用JS直接触发跳转并打开新窗口

如果元素的跳转逻辑比较复杂(比如需要传递某些参数),你可以直接用Selenium执行JavaScript,模拟元素的点击逻辑同时强制在新窗口打开:

# 执行JS,获取元素点击后的跳转目标并打开新窗口
target_url = driver.execute_script("""
// 模拟元素点击前的逻辑,或者直接获取跳转目标
var elem = arguments[0];
// 这里可以根据元素的实际JS逻辑调整,比如获取它绑定的跳转URL
var target = elem.dataset.url || elem.getAttribute('data-link');
window.open(target);
return target;
""", ele)

# 切换到新窗口处理
driver.switch_to.window(driver.window_handles[-1])
# ... 处理逻辑 ...
driver.close()
driver.switch_to.window(driver.window_handles[0])

3. 特殊情况:网站阻止了默认事件

如果元素是<a>标签但网站用JS阻止了默认的点击事件(比如调用了event.preventDefault()),那你可以绕过这个阻止,直接用JS触发跳转:

# 直接通过JS打开链接,绕过阻止逻辑
driver.execute_script("""
var elem = arguments[0];
var href = elem.href;
if (href) {
    window.open(href);
}
""", ele)

总结

因为手动操作都无法新窗口打开,所以不要纠结于ActionChains的Shift+Click了——这种方法只对浏览器识别的标准链接有效。核心思路是找到元素跳转的真实目标URL,然后手动用Selenium打开新窗口处理,这是最可靠的方式。

内容的提问来源于stack exchange,提问作者MiepMiep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:29:26