Python爬虫Selenium等待超时:如何修正目标CSS选择器?
解决Oddsportal赔率爬取的CSS选择器超时问题
原选择器的核心问题
原选择器div[set]>div:last-child a:has(a[title])~div:not(.hidden)存在两个关键错误:
- HTML规范不允许
<a>标签嵌套<a>标签,Oddsportal页面结构里不可能出现a:has(a[title])这种嵌套结构,这部分完全无效; - 即使忽略嵌套问题,
:has()伪类在部分旧版本Chrome的Selenium驱动中支持不完善,容易导致元素定位失败。
修正后的选择器方案
方案1:调整CSS选择器(适配现代Chrome驱动)
针对Oddsportal的实际页面结构,修正为更精准的CSS选择器,定位带有title属性的赔率标签对应的非隐藏内容容器:
div[set] > div:last-child a[title] ~ div:not(.hidden)
如果目标是直接定位赔率表格容器,也可以用更简洁的类选择器(需根据页面实际类名调整):
div[set] div.table-container:not(.hidden)
方案2:改用XPath(兼容性更强)
XPath在处理元素包含、兄弟关系时更灵活,且兼容性更好,推荐使用:
//div[@set]/div[last()]//a[@title]/following-sibling::div[not(contains(@class, 'hidden'))]
额外调试建议
- 打开浏览器开发者工具(F12),在元素搜索栏测试选择器,确认是否能匹配到目标元素;
- 检查页面是否存在iframe嵌套,若目标元素在iframe内,需先通过
driver.switch_to.frame()切换到对应iframe; - 延长WebDriverWait的超时时间,或结合
EC.presence_of_all_elements_located等更宽松的等待条件。
内容的提问来源于stack exchange,提问作者PyNoob
相关产品推荐
相关产品推荐

