发生错误:ElementClickInterceptedError:元素点击被拦截:

问题描述 投票:0回答:1

我正在尝试制作一个程序,如果我给它一个网页和任何单词,它就会点击它,例如我可以给它一个 Github 配置文件并给出单词“关注”,那么它就会按下关注按钮,然后开始遵循 Github 简介。

我怎样才能在 Selenium 中做到这一点?我目前收到此错误:

Error occurred: ElementClickInterceptedError: element click intercepted:

代码:

import { Builder, By, until } from "selenium-webdriver";

async function clickElementWithText(url, targetText) {
  const driver = await new Builder().forBrowser("chrome").build();

  try {
    await driver.get(url);

    const element = await driver.wait(
      until.elementLocated(
        By.xpath(`//body//text()[contains(., '${targetText}')]/parent::*`)
      ),
      10000
    );

    await element.click();
    console.log(`Clicked on element containing "${targetText}"`);
  } catch (error) {
    console.error("Error occurred:", error);
  }
}

const url = "https://github.com/shs96c";
const targetText = "Follow";
clickElementWithText(url, targetText);
javascript node.js selenium-webdriver
1个回答
1
投票

您的错误表明您尝试单击的元素与另一个元素重叠,因此无法单击。

要解决此问题,您可以尝试使用 JavaScript 而不是 Selenium 的 click() 方法来单击元素,例如:

import { Builder, By, until } from "selenium-webdriver";

const url = "https://github.com/shs96c";
const targetText = "Follow";

async function clickElementWithText(url, targetText) {
      const driver = await new Builder().forBrowser("chrome").build();

      try {
            await driver.get(url);
            const element = await driver.wait(
            until.elementLocated(
                  By.xpath(`//body//text()[contains(., '${targetText}')]/parent::*`)
                  ),10000);

            await driver.executeScript("arguments[0].click();", element);

            console.log(`Clicked on element containing "${targetText}"`);

      } catch (error) {

            console.error("Error occurred:", error);

      } finally {
            await driver.quit();
      }
}

clickElementWithText(url, targetText);

编辑:

使用 JS 的“querySelector”或“querySelectorAll[x]”来选择元素

告诉我它是否有效,如果无效,请对此答案发表评论。

我希望它能起作用 4 u

© www.soinside.com 2019 - 2024. All rights reserved.