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

Selenium点击下一页按钮失败,报ElementNotInteractableException异常

问题:点击“下一页”按钮触发ElementNotInteractableException异常的原因及解决办法

问题详情

目标按钮的HTML结构:

<li class="item pages-item-next">  
  <a class="action  next" href="https://oup.com.pk/academic-generalbooks.html?p=2" title="Next">
    <span class="label">Page</span>
    <span>Next</span>
  </a>
</li>

使用的错误代码:

x = browser.find_element(By.CLASS_NAME,'action.next')
x.click()

异常原因分析

  1. 定位方式错误:By.CLASS_NAME不支持多类名组合写法(如action.next),它只能接收单个类名。你写的action.next会被当成一个完整的类名去匹配,但目标元素的类是action和next两个独立类,所以这个定位要么找不到元素,要么找到错误元素,直接点击自然引发异常。
  2. 元素不可交互的常见场景:
    • 元素未完全加载完成就执行点击操作
    • 元素处于页面可视区域之外
    • 元素被其他DOM元素(如弹窗、遮罩层)遮挡

解决办法

1. 修正元素定位方式

放弃By.CLASS_NAME,改用支持多类名的By.CSS_SELECTOR或By.XPATH:

  • CSS选择器写法:
# 直接匹配多类名
x = browser.find_element(By.CSS_SELECTOR, '.action.next')
# 更精确的定位(结合父元素)
x = browser.find_element(By.CSS_SELECTOR, 'li.pages-item-next a.action.next')
  • XPath写法:
x = browser.find_element(By.XPATH, '//a[@class="action  next"]')
# 或结合文本定位
x = browser.find_element(By.XPATH, '//span[text()="Next"]/parent::a')

2. 处理元素不可交互的情况

等待元素可点击

使用显式等待确保元素加载完成且可点击:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待10秒,直到元素可点击
x = WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'li.pages-item-next a.action.next'))
)
x.click()

滚动到元素可视区域

如果元素不在屏幕内,先滚动到元素位置再点击:

x = browser.find_element(By.CSS_SELECTOR, 'li.pages-item-next a.action.next')
browser.execute_script("arguments[0].scrollIntoView(true);", x)
x.click()

用JavaScript强制点击

如果元素被遮挡或普通点击无效,尝试用JS点击:

x = browser.find_element(By.CSS_SELECTOR, 'li.pages-item-next a.action.next')
browser.execute_script("arguments[0].click();", x)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:33:17