我使用python与pyppeteer关联创建了一个脚本,以不断单击下一页按钮,直到没有更多为止。单击下一页按钮时,脚本将引发此错误pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded.
指向此行await page.waitForNavigation()
。但是,它可以从该站点的登录页面解析name
和item_type
。我知道我可以发出带有适当负载的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")
])
有了在数组中承诺的迭代器,所有方法将在成为true或完成所需的操作时解析。