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

使用Selenium Python点击网页复选框元素:无法定位元素的问题求助

解决Oddschecker元素定位失败的问题

我之前在自动化操作Oddschecker页面时也踩过类似的坑——用动态生成的ID定位完全不靠谱,每次刷新页面这些ID都会变,难怪你的代码没报错但也没效果,大概率是根本没定位到正确的元素。咱们一步步来解决:

为什么你的ID定位失效?

那个ew--26811263891是页面动态生成的唯一ID,每次加载页面都会重新生成,用固定字符串去匹配肯定找不到对应的元素。而且你用了element_to_be_clickable等待条件,要么是等待时间设置过长没触发超时,要么是页面上有其他匹配ID前缀的无关元素,导致代码没报错但点错了地方。

更可靠的定位方法

Oddschecker的页面元素其实有很多固定属性可以利用:博彩商的单元格会带data-bk属性(PaddyPower对应的是pp);每匹马的名字在表格的<th>标签里。结合这两个信息,就能写出精准的定位表达式:

方法1:XPath定位(最推荐)

直接定位包含"Sharesa"的行,再找到该行里属于PaddyPower的单元格:

# 精准匹配马名
wait.until(EC.element_to_be_clickable((By.XPATH, "//tr[.//th[text()='Sharesa']]//td[@data-bk='pp']"))).click()

# 如果担心马名有空格或格式问题,用contains模糊匹配
wait.until(EC.element_to_be_clickable((By.XPATH, "//tr[contains(.//th/text(), 'Sharesa')]//td[@data-bk='pp']"))).click()

方法2:CSS选择器(注意兼容性)

如果你的Selenium版本支持:has伪类,可以用CSS选择器:

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "tr:has(> th:contains('Sharesa')) td[data-bk='pp']"))).click()

不过旧版本的Chrome或Selenium可能不支持:has,所以XPath的兼容性更好。

万一还是点不动?

如果定位到元素但无法点击,可能是页面有覆盖层(比如加载动画、广告遮罩),或者元素的pointer-events被CSS禁用了。这时候可以用JavaScript强制点击:

# 先找到元素
target_element = wait.until(EC.presence_of_element_located((By.XPATH, "//tr[contains(.//th/text(), 'Sharesa')]//td[@data-bk='pp']")))
# 用JS执行点击
driver.execute_script("arguments[0].click();", target_element)

这样应该就能精准定位到你要的蓝色高亮单元格了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:14:10