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

如何用Selenium点击JS页面非button类型元素?遇拦截报错求解

解决ElementClickInterceptedException的方法
  • 用ID精准定位元素:原代码用PARTIAL_LINK_TEXT容易匹配到无关元素,直接用元素自带的id定位更可靠:

    wait = WebDriverWait(driver, 10)
    button = wait.until(EC.element_to_be_clickable((By.ID, "ajax_more_button")))
    
  • 滚动到元素可见区域再点击:元素可能在视口外或被其他元素遮挡,先滚动到目标位置:

    # 方式1:通过JS滚动到元素位置
    driver.execute_script("arguments[0].scrollIntoView(true);", button)
    button.click()
    
    # 方式2:用ActionChains模拟鼠标移动后点击
    from selenium.webdriver.common.action_chains import ActionChains
    ActionChains(driver).move_to_element(button).click().perform()
    
  • 直接执行JS点击绕过拦截:如果以上方法仍无效,直接通过JS触发元素的点击事件,跳过浏览器的点击校验:

    driver.execute_script("arguments[0].click();", button)
    
  • 排查遮挡元素:检查页面是否有cookie提示、广告弹窗等遮挡物,先定位并关闭这些元素后再点击加载按钮。

更高效的抓取方案:直接调用AJAX接口

Selenium模拟浏览器效率较低,这类“加载更多”的内容通常由后台AJAX接口返回,可直接抓包获取接口后用轻量库请求:

  1. 打开浏览器开发者工具(F12)切换到「Network」标签;
  2. 点击「さらに読み込む」,观察新增的XHR请求,找到返回文章数据的接口;
  3. 用requests或httpx直接请求该接口,解析返回的JSON/HTML获取文章链接,无需模拟浏览器,速度提升明显。

示例代码(实际接口以抓包结果为准):

import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
# 假设接口含分页参数,需根据实际情况调整
url = "https://www.yomiuri.co.jp/editorial/ajax/more?page=2"
response = requests.get(url, headers=headers)

# 若返回HTML格式,解析提取链接
soup = BeautifulSoup(response.text, "html.parser")
article_links = [a["href"] for a in soup.select("div.article-item a")]
print(article_links)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:55:24