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

点击Web元素为何触发浏览器驱动打开两个重复标签页?

解决点击元素打开重复标签页的问题

问题原因

你定位的外层容器元素(main-container-margins.width-100)内部嵌套了<a>标签,点击容器时,既触发了容器自身绑定的点击跳转事件,又触发了内部<a>标签的默认跳转行为,导致两次打开相同页面。

解决方案

1. 直接定位内部的<a>标签

跳过外层容器,直接找到实际负责跳转的<a>元素再点击,避免重复触发事件:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
# 把配置项传入Chrome驱动
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://upn.ru/kupit/kvartiry")
title = driver.title
print(title)

wait = WebDriverWait(driver, 5)
original_window = driver.current_window_handle
assert len(driver.window_handles) == 1

# 直接定位容器内的a标签
link_element = driver.find_element(By.CSS_SELECTOR, '.main-container-margins.width-100 a')
link_element.click()

# 等待新标签页打开(此时仅新增1个,总数量为2)
wait.until(EC.number_of_windows_to_be(2))
for window_handle in driver.window_handles:
    if window_handle != original_window:
        driver.switch_to.window(window_handle)
        break
title = driver.title
print(title)

2. 获取href属性手动打开页面

如果元素的点击事件逻辑复杂,可直接提取链接地址,用JS手动打开新标签页,完全避免触发元素的点击事件:

# 替换点击部分的代码
link_element = driver.find_element(By.CSS_SELECTOR, '.main-container-margins.width-100 a')
link_url = link_element.get_attribute('href')
# 用JS打开单个新标签页
driver.execute_script(f"window.open('{link_url}');")

# 后续切换标签页逻辑同上,等待窗口数量变为2
wait.until(EC.number_of_windows_to_be(2))

额外修正

你代码中定义了chrome_options但未传给webdriver.Chrome(),会导致headless模式不生效,已在上述代码中修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:45:02