BT1*_*101 10 javascript puppeteer
我已经无头了,我想等到用户重定向到某个页面。我可以使用waitForRequestpuppeteer API,但我不知道确切的 url,它必须通过一些情况。
因此,我使用 waitForFunction 并检查那里的情况,但是当我重定向到正确的 URL 时,我需要刷新页面以通过某种原因传递情况。
我的代码是:
try {
await page.waitForFunction(() => {
if(window &&
window.location &&
window.location.hostname) {
const host = window.location.hostname.split('.');
if(!host.includes('www') &&
!host.includes('new') &&
host.includes('margonem') &&
host.length === 3) {
return true;
}
}
}, {
polling: 200,
timeout: 0
})
} catch (e) {
console.log(e);
}
Run Code Online (Sandbox Code Playgroud)
当我重定向到通过上述所有 if 的 URL 时,我需要重新加载页面才能实际看到它返回 true。为什么它会这样工作?我不希望用户在输入正确的页面后被迫刷新页面。
我已经无头了,我想等到用户重定向到某个页面。
只需使用waitForNavigation()。
click与确保使用此模式结合使用:
const [response] = await Promise.all([
page.waitForNavigation(waitOptions),
page.click(selector, clickOptions),
]);
Run Code Online (Sandbox Code Playgroud)
waitForNavigation还返回一个响应对象,您可以检查该对象
我可以使用 puppeteer API 中的 waitForRequest 但我不知道确切的 url,它必须通过一些情况。
在这种情况下,puppeteer 将请求作为参数注入,您可以在 lambda 函数中测试它。例如:
page.waitForRequest(request => {
return request.url().includes('margonem') && request.method() === 'GET'
})
Run Code Online (Sandbox Code Playgroud)
我发现的最简单的方法是使用 waitForFunction,它很容易修改以适应您的规范并且紧凑。
await page.waitForFunction("window.location.pathname == '/Welcome.aspx'")
Run Code Online (Sandbox Code Playgroud)