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

Python+Selenium点击网页按钮报元素不存在错误如何解决

Selenium点击希伯来语按钮定位失败问题

异常表现

脚本运行后无法点击目标页面指定按钮,直接抛出NoSuchElementException异常,错误信息如下:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="ישראל כולל יהודה ושומרון"]"}
(Session info: chrome=102.0.5005.63)

待点击按钮参考截图:
待点击按钮截图

原问题代码

Main_page=webdriver.Chrome(options=chrome_options,service=chrome_service)
base_url="https://www.cbs.gov.il/he/Statistics/Pages/%D7%9E%D7%97%D7%95%D7%9C%D7%9C%D7%99%D7%9D/%D7%9E%D7%97%D7%95%D7%9C%D7%9C-%D7%AA%D7%90%D7%95%D7%A0%D7%95%D7%AA.aspx"
Main_page.get(base_url)
Main_page.maximize_window()
time.sleep(10)
button = Main_page.find_element(By.NAME, 'ישראל כולל יהודה ושומרון')
button.click()

故障根因

  • 定位方式使用错误:代码中传入的希伯来语字符串是按钮的对外显示文本,不是元素的name属性值,Selenium按照属性选择器[name="xxx"]匹配DOM节点,自然找不到对应元素。
  • 等待逻辑可靠性差:页面交互控件为动态异步渲染,固定sleep(10)的硬等待无法适配不同网络环境下的加载时序,元素未渲染到DOM树时执行查找必然报错。
  • 未处理iframe嵌套:该统计站点的交互模块嵌套在独立iframe内,不先切换到对应iframe上下文,直接在主文档DOM中查找元素也会定位失败。

修复方案

  1. 打开页面后先检查目标元素所在的iframe,若存在嵌套,先通过switch_to.frame()方法切换到对应iframe上下文再执行元素查找。
  2. 替换硬等待为Selenium显式等待,设置合理的超时时间,等待元素达到可点击状态后再执行操作。
  3. 替换错误的By.NAME定位方式,使用XPath按元素文本匹配目标节点。

修复后的核心代码片段:

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

# 初始化浏览器、访问页面、最大化窗口逻辑保持不变
# 设置20秒显式等待
wait = WebDriverWait(Main_page, 20)
# 按文本匹配目标按钮,等待可点击后执行点击
# 若文本存在前后空白字符,可将text()精确匹配替换为contains(text(), "ישראל כולל יהודה ושומרון")
button = wait.until(EC.element_to_be_clickable(
    (By.XPATH, '//*[text()="ישראל כולל יהודה ושומרון"]')
))
button.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:09:21