我试图让 puppeteer 在继续下一个语句之前等待导航完成。基于waitForNavigation()的文档,代码应该在下面工作。但它只是跳到下一个语句,我必须使用一种解决方法来等待响应中的特定 URL。
我也尝试了所有
waituntil选项(加载、domcontentloaded、networkidle0 和 networkidle2)。
任何如何让我正常工作的想法都值得赞赏。
const browser = await puppeteer.launch({
headless: false,
})
const page = await browser.newPage()
const home = page.waitForNavigation()
await page.goto(loginUrl)
await home
const login = page.waitForNavigation()
await page.type('#email', config.get('login'))
await page.type('#password', config.get('password'))
await page.click('#submitButton')
await login // << skips over this
// the following line is my workaround and it works , but ideally I don't want
// to specify the expected "after" page each time I navigate
await page.waitForResponse(request => request.url() === 'http://example.com/expectedurl')
Run Code Online (Sandbox Code Playgroud)
Gra*_*ler 11
该函数page.waitForNavigation()等待导航开始和结束。
导航已通过 启动page.click()。
因此,您可以使用Promise.all()来避免上述函数之间的竞争条件:
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
await page.goto(loginUrl);
await page.type('#email', config.get('login'));
await page.type('#password', config.get('password'));
await Promise.all([
page.click('#submitButton'),
page.waitForNavigation({
waitUntil: 'networkidle0',
}),
]);
await browser.close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7687 次 |
| 最近记录: |