Playwright:如何在延迟加载页面中循环向下滚动或显示更多或向下翻页

问题描述 投票:0回答:1

我正在尝试在延迟加载网站(类似于 LinkedIn.com)的主页上执行受控滚动。但剧作家不支持自动滚动。所以我使用了以下方法:

  1. 找到“显示更多结果”按钮并单击它
await page.locator('button:has-text("Show more results")').click();

此方法的问题是点击会无限循环,并在默认 30 秒后超时。如果我设置

timeout:0
那么它不会超时,它会无限循环。

  1. 尝试使用如下所示的
    waitForSelectoras
    控制点击时:
for (let i = 0; i < 20; i++) {
     let loadMore = await page.waitForSelector(('button:has-text("Show more results")');
     await loadMore.click({delay: 1000, timeout: 0});
}

它会抛出

Element is not attached to DOM
错误。登录如下:

elementHandle.click: Element is not attached to the DOM
=========================== logs ===========================
attempting click action
  waiting for element to be visible, enabled and stable
  element is visible, enabled and stable
  scrolling into view if needed
  done scrolling
  performing click action
  <html lang="en" class="theme theme--mercado artdeco os…>…</html> intercepts pointer events
retrying click action, attempt #1
  waiting for element to be visible, enabled and stable
============================================================

唯一可行的方法是:

for (let i = 0; i < 20; i++) {
    await page.keyboard.down('PageDown');
}

任何关于使用 Playwright 库更好地控制滚动的建议都会很有帮助:) 谢谢。

javascript automated-tests ui-automation playwright
1个回答
0
投票

您可以尝试使用

await page.keyboard.press('End');
滚动到页面末尾,然后使用显示更多结果按钮上的定位器重试。

您也可以尝试:

await page.locator(('button:has-text("Show more results")').scrollIntoViewIfNeeded();

或更直接

await page.locator('button:has-text("Show more results")').click()

因为剧作家单击应该在尝试单击之前自动将元素滚动到视图中。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.