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

JS禁用Ctrl+Click/Enter无法开新标签,Selenium Python如何实现自动化操作?

解决方法

你遇到的是站点前端主动拦截了键盘关联的交互事件,模拟系统快捷键的操作被事件监听逻辑拦截了,可通过以下几个方案绕过:

方案1:直接提取跳转地址开新标签(优先推荐)

完全绕开页面的交互事件拦截,主动获取每个NFT卡片的详情页链接,通过JS直接打开新标签,不会触发任何前端拦截逻辑:
替换你原有的click_and_open_new_tab函数即可:

def click_and_open_new_tab(driver, element):
    # 提取卡片对应的跳转链接,可根据实际DOM结构调整取值逻辑
    target_url = driver.execute_script("""
        const linkNode = arguments[0].querySelector('a');
        return linkNode ? linkNode.href : arguments[0].dataset.href;
    """, element)
    # 直接调用JS打开新标签
    driver.execute_script(f"window.open('{target_url}', '_blank');")

方案2:清除页面的拦截事件监听

页面加载完成后先执行一段JS,移除站点绑定的快捷键、右键拦截逻辑,之后你原有的模拟Ctrl+点击的代码就可以正常运行:

# 打开目标站点后立即执行这段代码
driver.execute_script("""
    // 给核心交互事件添加最高优先级的监听,阻止站点的拦截逻辑生效
    document.addEventListener('contextmenu', e => e.stopImmediatePropagation(), true);
    document.addEventListener('keydown', e => e.stopImmediatePropagation(), true);
    document.addEventListener('click', e => e.stopImmediatePropagation(), true);
    // 清空页面绑定的默认拦截回调
    document.oncontextmenu = null;
    document.onkeydown = null;
""")

方案3:调整为单标签循环逻辑

如果不需要多标签并行处理,可以修改循环逻辑,每次点击卡片在当前标签打开,处理完详情页后调用driver.back()回到列表页即可,注意每次返回列表页后要重新执行driver.find_elements_by_xpath(thumb_xpath)获取最新的元素列表,避免元素过期报错。

另外你原代码的循环存在索引越界问题:循环变量i的范围是0~len(thumb_selector)-1,但你取元素用了thumb_selector[i+1],循环到最后一个元素时会抛出索引异常,需要改成thumb_selector[i]。

页面截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:06:00