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

Selenium可定位链接元素但.get_attribute('href')返回None求助

解决Selenium获取href返回None的问题

核心原因与解决方案

1. 区分HTML属性与DOM属性

Selenium的get_attribute()获取的是HTML源码中定义的静态属性,但部分动态渲染页面中,链接的实际跳转地址会由JavaScript赋值到DOM元素的property属性中。此时改用get_property('href')即可正确获取动态生成的链接:

element = wait.until(ec.element_to_be_clickable((By.XPATH, "//*[@id='app-mount']/div[2]/div[1]/div[3]/div[2]/div/div/div/div/div[2]/div/div[3]/div[2]/div[1]/div/div[1]/div/div[1]/a")))
x = element.get_property('href')

2. 修正XPATH语法错误

你提供的第二个XPATH存在语法缺陷:contains(@href, 'steamcommunity']缺少闭合括号,正确写法应为:

element = wait.until(ec.element_to_be_clickable((By.XPATH, "//a[contains(@href, 'steamcommunity')]")))

3. 优化定位器稳定性

Chrome自动生成的长路径XPATH极度依赖页面结构,稍有变动就会失效。建议改用更健壮的定位逻辑,结合元素的class和href特征:

# 基于class标识+href关键词定位,适配页面结构变化
element = wait.until(ec.element_to_be_clickable((By.XPATH, "//a[contains(@class, 'anchor-1X4H4q') and contains(@href, 'steamcommunity')]")))
x = element.get_property('href')

4. 验证元素实际属性

如果问题仍存在,可以先打印元素的完整HTML代码,确认href属性是否真的存在于当前DOM中:

element = wait.until(ec.element_to_be_clickable((By.XPATH, "//*[@id='app-mount']/div[2]/div[1]/div[3]/div[2]/div/div/div/div/div[2]/div/div[3]/div[2]/div[1]/div/div[1]/div/div[1]/a")))
print(element.get_attribute('outerHTML'))
# 从输出中检查href是否存在,再针对性调整逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:25:39