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

Selenium无法点击单选按钮触发ElementClickInterceptedException异常

Selenium单选按钮点击被导航栏拦截问题

场景说明

  • 爬取目标页面:https://www.velocityap.com/product/3-0l-v6-supercharged-jaguar-land-rover-aj126-ecu-tuning/
  • 爬取目标:页面内的汽车配件价格,该价格需选中指定单选按钮组后才会加载显示,价格位置参考下图:
    价格标注参考图

原有实现代码

options_panel_4 = driver.find_elements(By.CSS_SELECTOR,'div.summary.entry-summary > div.mspc-wrapper.mspc-clearfix.mspc-module-accordion.mspc-auto-next.mspc-step-by-step > div > div:nth-child(8) > div > div')
print('Options under options panel 3 :', len(options_panel_4))

for option_4 in options_panel_4:
    driver.execute_script("arguments[0].scrollIntoView();", option_4)
    option_4.find_element(By.CSS_SELECTOR, 'div > div.mspc-radio.ui.radio.checkbox > input[type=radio]').click()

报错信息

代码运行时抛出selenium.common.exceptions.ElementClickInterceptedException异常,提示目标单选按钮被顶部固定导航栏遮挡,点击操作被导航栏拦截,无法正常选中,完整报错栈如下:

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <div class="mspc-radio ui radio checkbox">...</div> is not clickable at point (890, 14). Other element would receive the click: <div class="infinite-navigation infinite-item-pdlr clearfix infinite-navigation-submenu-indicator ">...</div>
  (Session info: chrome=102.0.5005.115)
Stacktrace:
0   chromedriver                        0x00000001024162c9 chromedriver + 5120713
1   chromedriver                        0x00000001023a4e33 chromedriver + 4656691
2   chromedriver                        0x0000000101f94158 chromedriver + 393560
3   chromedriver                        0x0000000101fd0638 chromedriver + 640568
4   chromedriver                        0x0000000101fce1b3 chromedriver + 631219
5   chromedriver                        0x0000000101fcb814 chromedriver + 620564
6   chromedriver                        0x0000000101fca5b2 chromedriver + 615858
7   chromedriver                        0x0000000101fbe249 chromedriver + 565833
8   chromedriver                        0x0000000101fe6482 chromedriver + 730242
9   chromedriver                        0x0000000101fbdb05 chromedriver + 563973
10  chromedriver                        0x0000000101fe658e chromedriver + 730510
11  chromedriver                        0x0000000101ff8f41 chromedriver + 806721
12  chromedriver                        0x0000000101fe6373 chromedriver + 729971
13  chromedriver                        0x0000000101fbc609 chromedriver + 558601
14  chromedriver                        0x0000000101fbd635 chromedriver + 562741
15  chromedriver                        0x00000001023e8b1d chromedriver + 4934429
16  chromedriver                        0x00000001023ed295 chromedriver + 4952725
17  chromedriver                        0x00000001023f23cf chromedriver + 4973519
18  chromedriver                        0x00000001023edcba chromedriver + 4955322
19  chromedriver                        0x00000001023c837c chromedriver + 4801404
20  chromedriver                        0x0000000102407c68 chromedriver + 5061736
21  chromedriver                        0x0000000102407def chromedriver + 5062127
22  chromedriver                        0x000000010241d5e5 chromedriver + 5150181
23  libsystem_pthread.dylib             0x00007ff80f3874e1 _pthread_start + 125
24  libsystem_pthread.dylib             0x00007ff80f382f6b thread_start + 15

解决方法

问题核心原因是默认scrollIntoView()会将元素滚动到视口最顶部,刚好被固定在顶部的导航栏覆盖,导致点击落点落在导航栏上。三种可直接落地的修复方案:

  • 调整滚动位置,将元素滚动到视口中间区域,避开顶部导航
import time
from selenium.webdriver.common.by import By

# 替换原有滚动逻辑
for option_4 in options_panel_4:
    # 把元素滚动到视口中央,不会被顶部导航遮挡
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", option_4)
    time.sleep(0.3) # 等待滚动动画完成
    option_4.find_element(By.CSS_SELECTOR, 'div > div.mspc-radio.ui.radio.checkbox > input[type=radio]').click()
  • 直接通过JS触发元素点击,绕过Selenium的元素可见性/点击位置校验
for option_4 in options_panel_4:
    radio_input = option_4.find_element(By.CSS_SELECTOR, 'div > div.mspc-radio.ui.radio.checkbox > input[type=radio]')
    # JS直接触发点击,不受元素遮挡影响
    driver.execute_script("arguments[0].click();", radio_input)
  • 提前隐藏遮挡的导航栏元素,再执行原有点击逻辑
# 选中遮挡的导航栏,直接设置隐藏
blocking_nav = driver.find_element(By.CSS_SELECTOR, 'div.infinite-navigation')
driver.execute_script("arguments[0].style.display = 'none';", blocking_nav)

# 后续原有逻辑不需要修改即可正常点击
for option_4 in options_panel_4:
    driver.execute_script("arguments[0].scrollIntoView();", option_4)
    option_4.find_element(By.CSS_SELECTOR, 'div > div.mspc-radio.ui.radio.checkbox > input[type=radio]').click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:15:57