我正在尝试制作一个程序,如果我给它一个网页和任何单词,它就会点击它,例如我可以给它一个 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 而不是 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