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

JavaScript Selenium-Webdriver滚动问题:元素点击被拦截

问题:遍历品牌时出现ElementClickInterceptedError错误

我在页面中尝试遍历每个品牌,但操作5-7个品牌后脚本无法继续,原因是需要滚动页面。报错信息如下:

ElementClickInterceptedError: element click intercepted: Element is not clickable at point (389, 539). Other element would receive the click: <span ...

我的代码如下:

let swd = require("selenium-webdriver");
let browser = new swd.Builder();
let tab = browser.setChromeOptions().forBrowser("chrome").build();

async function main() {

    await tab.get("https://www.ameublement.com/showroom");

    // PAGE BRAND
    let brands = await tab.findElements(
        swd.By.css(".col-6.col-lg-12.card-img")
    );

    for (let e of brands) {
        console.log('go to page of a brand')
        await e.click()

        tab.sleep(300);

        // GO BACK
        tab.navigate().back()

        // await tab.executeScript("arguments[0].scrollIntoView();", e);
        // tab.getElementByClassName(e).scrollIntoView();

    };
}

我尝试过以下两种方法:

  1. 执行滚动脚本(未生效):
// await tab.executeScript("arguments[0].scrollIntoView();", e);
  1. 调用scrollIntoView,但抛出错误:
// tab.getElementByClassName(e).scrollIntoView()

TypeError: tab.getElementByClassName is not a function


解决办法

  1. 修复滚动逻辑与异步操作:
    你之前的executeScript滚动方法是正确的,但需要调整执行时机并补全异步操作的await。修改后的循环代码如下:

    for (let e of brands) {
        console.log('go to page of a brand')
        // 先将元素滚动到可视区域中心
        await tab.executeScript("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center'});", e);
        // 等待元素可点击
        await tab.wait(swd.until.elementIsVisible(e), 2000);
        await e.click();
    
        await tab.sleep(300);
        // 等待页面返回完成
        await tab.navigate().back();
        // 返回后等待品牌列表重新加载完成
        await tab.wait(swd.until.elementsLocated(swd.By.css(".col-6.col-lg-12.card-img")), 3000);
    };
    
  2. 错误原因说明:

    • tab.getElementByClassName不是Selenium JavaScript的合法API,直接使用已有元素对象e配合executeScript滚动即可。
    • ElementClickInterceptedError是因为元素不在可视区域,被页面其他元素遮挡,必须先滚动到可见位置再点击。
    • 未加await的异步操作(如tab.sleep、tab.navigate().back())会导致脚本执行顺序混乱,引发元素状态异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:24:37