Страница поиска Google "следующий" промежуток с селен-webdriver & nodejs - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь настроить следующие действия с Selenium-Webdriver и NodeJs:

  • Открыть Firefox
  • Go для Google.com
  • Поиск по имени в Google
  • Дождитесь загрузки страницы
  • Выберите и нажмите рядом со второй страницей.

Я застрял на последней пошли и искали похожие вопросы в StackOverflow, но ни один из ответов не позволил мне найти теги or для «next» или «page 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();

1 Ответ

0 голосов
/ 16 марта 2020

Основываясь на комментариях, я добавил «Ждать» и «Прокрутить вниз», и код может

  • Переход в 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».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...