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

Selenium如何抓取被其他元素遮挡的页面元素?

解决被遮挡元素的抓取问题

针对你遇到的元素被a标签遮挡导致无法抓取的问题,可尝试以下几种方案:

1. 修复定位上下文错误(优先检查)

你当前代码里的driver.find_element是全局查找,而非在当前match元素下查找,这大概率是导致报错的核心原因之一。把循环内的查找改为基于当前match的相对定位:

pts1 = []
pts2 = []

table = driver.find_elements(By.XPATH, '//article[contains(@class,"game-card-view")]')
for match in table:
    # 改用match.find_element,限定在当前article下查找子元素
    pts1.append(match.find_element(By.XPATH, './div/div[3]/div[1]/span').text)
    pts2.append(match.find_element(By.XPATH, './div/div[3]/div[2]/span').text)

2. 通过JavaScript直接提取文本

如果元素确实被遮挡无法直接获取文本,可借助JavaScript绕过渲染层面的遮挡,直接读取DOM元素的文本内容:

pts1 = []
pts2 = []

table = driver.find_elements(By.XPATH, '//article[contains(@class,"game-card-view")]')
for match in table:
    # 用execute_script获取元素文本
    score1 = driver.execute_script('return arguments[0].textContent;', match.find_element(By.XPATH, './div/div[3]/div[1]/span'))
    score2 = driver.execute_script('return arguments[0].textContent;', match.find_element(By.XPATH, './div/div[3]/div[2]/span'))
    pts1.append(score1.strip())
    pts2.append(score2.strip())

3. 临时隐藏遮挡的a元素

如果遮挡的a元素是固定结构,可通过JS将其隐藏后再正常抓取元素:

# 先隐藏所有遮挡的a元素(需替换为对应a元素的定位)
driver.execute_script('document.querySelectorAll("a.your-blocking-class").forEach(el => el.style.display = "none");')

pts1 = []
pts2 = []

table = driver.find_elements(By.XPATH, '//article[contains(@class,"game-card-view")]')
for match in table:
    pts1.append(match.find_element(By.XPATH, './div/div[3]/div[1]/span').text)
    pts2.append(match.find_element(By.XPATH, './div/div[3]/div[2]/span').text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:27:36