添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

从网站上搜刮某些字段时,不能继续点击下一页按钮

4 人关注

我创建了一个脚本,使用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())
            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())

Btw,如果我第一次手动点击下一页按钮,它就能成功完成剩下的工作。

1 个评论
据作者说。 this 是正确的方法 await asyncio.wait([page.click(...), page.waitForNavigation()]) 。然而,它也不能解决这个问题。只有当我第一次手动点击按钮时,脚本才开始点击下一页的按钮。
python
python-3.x
web-scraping
puppeteer
pyppeteer
robots.txt
robots.txt
发布于 2020-03-20
1 个回答
Edi Imanto
Edi Imanto
发布于 2020-03-20
已采纳
0 人赞同

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

await Promise.all([
   page.waitForNavigation(),