【问题标题】:Google search page "next" span with selenium-webdriver & nodejs谷歌搜索页面“下一个”跨度与 selenium-webdriver & nodejs
【发布时间】:2020-06-27 02:29:28
【问题描述】:

我正在尝试使用 Selenium-Webdriver 和 NodeJs 设置以下操作:

  • 打开火狐
  • 访问 Google.com
  • 在 Google 中搜索名称
  • 等待页面加载
  • 选择并单击第二页旁边的。

我被困在最后一步,并在 StackOverflow 上搜索了类似的问题,但没有一个答案允许我找到“下一步”或“第 2 页”的或标记。我什至通过检查复制了完整的 XPath,但总是收到“NoSuchElementError”。

感谢您的帮助。

const { Builder, By, Key, until, Wait } = require('selenium-webdriver');

require('geckodriver');
const faker = require('faker');

const searchGoogle = async () => {
    let name = faker.name.findName();
    let driver = await new Builder().forBrowser('firefox').build();

    try {
        await driver
            .manage()
            .window()
            .maximize();
        await driver.manage().deleteAllCookies();

        await driver.get('http://google.com');
        await driver.findElement(By.name('q')).sendKeys(name, Key.RETURN);
        await driver.wait(until.titleIs(name), 1000);
        await driver
            .findElement(By.xpath("//span[contains(text(), 'Next')]"))
            .click();
    } catch (err) {
        console.error(err);
    } finally {
        driver.quit();
        console.log('complete!');
    }
};

searchGoogle();

【问题讨论】:

  • 尝试使用 Wait 进行试验,等到此“下一步”显示或可点击。 stackoverflow.com/questions/16882860/…。定位器绝对正确,刚刚在 python 中尝试过,它为我点击了它。
  • @tony 我认为问题是下一个按钮不在视图中,在执行点击事件之前编写一个脚本在页面中向下滚动。
  • @subbu,非常感谢。我根据您的建议制作了脚本来做到这一点。它在大多数情况下都有效;但是,我认为我仍然需要使用“等待”来加载页面。非常感谢。

标签: javascript node.js selenium-webdriver xpath


【解决方案1】:

在cmets的基础上,我添加了“Wait”和“Scroll down”,代码就可以了

  • 转到 Google,
  • 搜索名称
  • 等待搜索页面加载,等待滚动到底部,等待下一个跨度点击()
const { Builder, By, Key, until } = require('selenium-webdriver');

require('geckodriver');
const faker = require('faker');

const searchGoogle = async () => {
    let name = faker.name.findName();
    let driver = await new Builder().forBrowser('firefox').build();

    try {
        await driver
            .manage()
            .window()
            .maximize();
        await driver.manage().deleteAllCookies();

        await driver.get('https://www.google.com/');
        await driver.findElement(By.name('q')).sendKeys(name, Key.RETURN);

        await driver.wait(() => {
            until.titleIs(`${name}  - Google Search`);
            driver.executeScript('window.scrollTo(0, document.body.scrollHeight)');
            driver.findElement(By.xpath("//span[contains(text(), 'Next')]")).click();
        }, 1000);
    } catch (err) {
        console.error(err);
    } finally {
        // driver.quit();
        console.log('complete!');
    }
};

searchGoogle();

但是,现在不是只单击下一次到第二页,而是转到第三页。我实在想不通这背后的原因。 Selenium-webdriver 文档对如何使用“.wait”不是很清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多