我将如何在 selenium webdriver 中自动执行此操作?

How would I automate this in selenium webdriver?

我是 Selenium Webdriver (Js) 的新手,正在尝试学习一些基础知识,主要停留在这个例子上:

我正在尝试自动谷歌搜索“暗黑破坏神 2 复活前发布的天数”,然后将剩余天数从 google 打印到控制台。

我遇到的困难是将剩余天数打印到我的控制台。我觉得问题是,当 webdriver 试图找到它时,我尝试使用 .getText() 的元素尚不可用,但是使用 driver.sleep() 或 implicitlyWait 对我不起作用由于某些原因。我使用 xpath 和 css 作为选择器,它们都不适合我。这是我的代码:

const {Builder, By, Key, until, WebDriver} = require("selenium-webdriver");
const { elementIsVisible } = require("selenium-webdriver/lib/until");
require("chromedriver");



let driver = new Builder().forBrowser("chrome").build();



driver.get("https://google.com");


// this clicks on cookies accept button
driver.findElement(By.css("#L2AGLb > div")).click();

driver.findElement(By.css('body > div.L3eUgb > div.o3j99.ikrT4e.om7nvf > form > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input')).sendKeys('Diablo 2 Resurrected days until release');

driver.findElement(By.xpath('/html/body/div[1]/div[3]/form/div[1]/div[1]/div[3]/center/input[1]')).click();

driver.findElement(By.xpath('/html/body/div[7]/div/div[9]/div[1]/div/div[2]/div[2]/div/div/div[1]/div/div[1]/div[1]/div[1]/div/div[2]/div/div[1]')).getText().then(txt => {
    console.log("Do D2R releasu zbývá: " + txt)
    }).catch(err => {
        console.log('error!', err);
});

这里是错误:

error! NoSuchElementError: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[7]/div/div[9]/div[1]/div/div[2]/div[2]/div/div/div[1]/div/div[1]/div[1]/div[1]/div/div[2]/div/div[1]"}

编辑:已解决!这是工作代码

const {Builder, By, Key, until, WebDriver} = require("selenium-webdriver");
require("chromedriver");

let driver = new Builder().forBrowser("chrome").build();

async function howManyDaysTillDiablo2ResurrectedRelease() {
    await driver.get("https://google.com");
    await driver.findElement(By.css("#L2AGLb > div")).click();
    await driver.findElement(By.css('body > div.L3eUgb > div.o3j99.ikrT4e.om7nvf > form > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input')).sendKeys('Diablo 2 Resurrected days until release');
    await driver.findElement(By.xpath('/html/body/div[1]/div[3]/form/div[1]/div[1]/div[3]/center/input[1]')).click();

    let ele = await driver.wait(until.elementLocated(By.css("div[data-attrid*='calculate:how_many_days_away'][role='heading'] div")), 10000);
    let foo = await ele.getText();





    await driver.findElement(By.css("div[data-attrid*='calculate:how_many_days_away'][role='heading'] div")).getText().then(foo => {
        console.log("Do D2R releasu zbývá: " + foo)
        }).catch(err => {
            console.log('error!', err);
    
    
})};

howManyDaysTillDiablo2ResurrectedRelease();

您正在使用的 xpath 看起来像是从开发工具中获得的。 (而且是绝对 xpath,不是相对 xpath)

正如您提到的您是初学者,我建议您学习 css 选择器和 xpath 并尝试编写自己的。同时 :-

您可以使用下面的 css :

div[data-attrid*='calculate:how_many_days_away'][role='heading'] div

并像这样使用它:

driver.findElement(By.css("div[data-attrid*='calculate:how_many_days_away'][role='heading'] div
")).getText()

更新:

let ele = await driver.wait(until.elementLocated(By.css("div[data-attrid*='calculate:how_many_days_away'][role='heading'] div")), 10000);
let foo = await ele.getText();