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

Selenium报Unable to locate element需点击新窗口才生效如何解决

问题解决方法

首先明确你现有代码的两个核心错误,是触发报错的主要原因:

  • 错误1:find_element_by_class_name() 方法仅支持传入单个CSS类名,你传入的mat-select-arrow-wrapper.ng-tns-c73-7是多类组合的CSS选择器语法,用错定位方法本身就会导致找不到元素
  • 错误2:类名中的ng-tns-c73-7是Angular框架动态生成的随机后缀类名,页面每次加载、版本更新后后缀都会变化,用这个做定位条件本身就不稳定

针对需要手动点击窗口才能操作的问题,按以下方案调整即可解决:

  • 操作页面前先强制激活当前窗口的焦点,避免Selenium操作焦点未绑定到新打开的浏览器窗口
  • 替换硬等待为显性等待,搭配稳定的CSS选择器定位元素,不要使用动态生成的随机类名
  • 如果元素不在初始视口内,点击前先滚动到元素位置,避免元素不可交互的问题

修正后可运行代码示例

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 webdriver_manager.chrome import ChromeDriverManager

url = "https://www.pamyra.de/"

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(url)
# 强制激活当前窗口焦点,解决需要手动点击窗口的问题
driver.switch_to.window(driver.current_window_handle)

wait = WebDriverWait(driver, 10)
# 用稳定的CSS选择器定位,可根据页面实际结构调整规则,避免使用动态ng-tns类
# 示例规则为定位第三个选择框的箭头元素,可根据实际页面替换
target_select = wait.until(EC.element_to_be_clickable(
    (By.CSS_SELECTOR, ".mat-select-container:nth-of-type(3) .mat-select-arrow-wrapper")
))
# 滚动到元素位置保证可见
driver.execute_script("arguments[0].scrollIntoView();", target_select)
target_select.click()

如果点击仍无响应,可替换原生点击为JS点击,规避元素被遮挡等交互限制:

driver.execute_script("arguments[0].click();", target_select)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:36:01