Puppeteer 等待 url

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。为什么它会这样工作?我不希望用户在输入正确的页面后被迫刷新页面。

B12*_*ter 7

我已经无头了,我想等到用户重定向到某个页面。

只需使用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)


Asd*_*752 7

我发现的最简单的方法是使用 waitForFunction,它很容易修改以适应您的规范并且紧凑。

  await page.waitForFunction("window.location.pathname == '/Welcome.aspx'")
Run Code Online (Sandbox Code Playgroud)