如何用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接口返回,可直接抓包获取接口后用轻量库请求:
- 打开浏览器开发者工具(F12)切换到「Network」标签;
- 点击「さらに読み込む」,观察新增的XHR请求,找到返回文章数据的接口;
- 用
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
相关产品推荐
相关产品推荐

