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()
异常原因分析
- 定位方式错误:
By.CLASS_NAME不支持多类名组合写法(如action.next),它只能接收单个类名。你写的action.next会被当成一个完整的类名去匹配,但目标元素的类是action和next两个独立类,所以这个定位要么找不到元素,要么找到错误元素,直接点击自然引发异常。 - 元素不可交互的常见场景:
- 元素未完全加载完成就执行点击操作
- 元素处于页面可视区域之外
- 元素被其他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
相关产品推荐
相关产品推荐

