Невозможно go при нажатии на кнопку следующей страницы при очистке определенных полей с веб-сайта. - PullRequest
3 голосов
/ 19 марта 2020

Я создал скрипт, использующий python в сочетании с pyppeteer , чтобы продолжать нажимать на кнопку следующей страницы, пока не будет больше. Скрипт при нажатии на кнопку следующей страницы выдает эту ошибку pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded., указывающую на эту строку await page.waitForNavigation(). Однако он может анализировать name и item_type с целевой страницы этого сайта. Я знаю, что могу отправлять запросы http с соответствующей полезной нагрузкой, чтобы получить оттуда данные, но я намерен использовать pyppeteer и продолжать нажимать на кнопку следующей страницы, анализируя необходимые поля.

адрес веб-сайта

import asyncio
from pyppeteer import launch

link = "https://www.e-ports.com/ships"

async def get_content():
    wb = await launch(headless=True)
    [page] = await wb.pages()
    await page.goto(link)

    while True:
        await page.waitForSelector(".common_card", {'visible':True})

        elements = await page.querySelectorAll('.common_card')
        for element in elements:
            name = await element.querySelectorEval('span.title > a','e => e.innerText')
            item_type = await element.querySelectorEval('.bottom > span','e => e.innerText')
            print(name.strip(),item_type.strip())

        try:
            await page.click("button.btn-next")
            await page.waitForNavigation()
        except Exception: break

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(get_content())

Кстати, если я впервые вручную нажму кнопку следующей страницы, остальное выполнится успешно.

1 Ответ

1 голос
/ 19 марта 2020

Я не знаю действительный синтаксис в Pypeteer, но общий синтаксис waitForNavigation может быть такой.

await Promise.all([
   page.waitForNavigation(),
   page.click("button.btn-next")
])

С обещанным итератором внутри массива все методы будут разрешены, когда станут истинное или законченное желаемое действие.

...