Selenium Safari中如何定位并点击Wunderground天气页的History元素
Safari驱动下History元素的定位与问题排查
先定位invalid syntax报错的核心原因
这个报错不是Selenium找不到元素的运行时错误,是Python脚本本身的语法书写错误,代码根本没执行到元素定位环节就中断了,常见触发场景:
- 写定位语句时没有给元素文本、选择器字符串加引号,比如直接写
find_element(History)把History当未定义的Python变量,解析时直接触发语法错误 - 字符串引号嵌套错误,外层用单引号时内层未转义直接使用同类型引号
- 括号漏写、代码缩进不符合Python语法规则
可靠定位History元素的实现方案
该网站的导航栏class是前端构建生成的动态哈希值,每次页面刷新都会变动,不要依赖class定位。搭配显式等待适配Safari驱动的渲染速度差问题,用文本匹配的方式定位,稳定性最高,实现代码如下:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 驱动初始化完成、访问目标伦敦天气页面后执行 # 最长等待10秒,直到History元素可点击 history_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//a[normalize-space(text())='History']")) ) history_btn.click()
如果不想写XPath,也可以用Selenium原生的链接文本定位方式,效果完全一致:
history_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.LINK_TEXT, "History")) ) history_btn.click()
高频踩坑提醒
- 不要不加等待直接定位元素:Safari驱动的页面渲染速度慢于Chromium内核浏览器,缺少等待逻辑时很容易因为导航栏未加载完成触发定位失败
- 不要用过短的XPath匹配规则,避免匹配到页面上其他同名元素
- 确保已经在Safari的开发菜单中开启“允许远程自动化”权限,否则驱动会直接连接失败,和定位逻辑无关
内容的提问来源于stack exchange,提问作者GUILLE DOMINGUEZ
相关产品推荐
相关产品推荐

