点击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
相关产品推荐
相关产品推荐

