python - 从网站抓取某些字段时无法继续单击下一页按钮

标签 python python-3.x web-scraping puppeteer pyppeteer

我使用 python 与 pyppeteer 关联创建了一个脚本 继续点击下一页按钮,直到没有更多内容为止。单击下一页按钮时,脚本会抛出此错误pyppeteer.errors.TimeoutError:导航超时超出:超出30000毫秒。指向此行await page.waitForNavigation() 。不过,它可以从该网站的登陆页面解析nameitem_type。我知道我可以使用适当的负载发出 post http 请求以从那里获取数据,但我的目的是利用 pyppeteer 并在解析所需字段时继续单击下一页按钮。

website address

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())

顺便说一句,如果我第一次手动单击下一页按钮,它会成功完成其余的操作。

最佳答案

我不知道 Pypeteer 中的有效语法,但 waitForNavigation 的常见语法可能是这个。

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

通过 promise 数组内的迭代器,所有方法都将在变为 true 或完成所需操作时解析。

关于python - 从网站抓取某些字段时无法继续单击下一页按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60763644/

相关文章:

python - 将 pandas 数据框嵌套列表拆分为新的命名列

python-3.x - 如何在使用带有 for 循环的请求时忽略 HTTP 错误?

python - 在 python 中发出 get 请求时不断收到 SSL 错误

python - Canvas 内的网络抓取图像

javascript - 所有脚本和页面加载完成后如何获取所有html数据? ( puppeteer 师)

python - df.style.apply 在显示中居中显示多索引值

python - 需要帮助在 Python/Sage 中编写算法

python NameError : global name '__file__' is not defined

python - 即使忽略了 CancelledError,如何取消任务执行?

vba - 找不到任何方法来单击下拉菜单来选择任何更喜欢的项目