我正在尝试在延迟加载网站(类似于 LinkedIn.com)的主页上执行受控滚动。但剧作家不支持自动滚动。所以我使用了以下方法:
await page.locator('button:has-text("Show more results")').click();
此方法的问题是点击会无限循环,并在默认 30 秒后超时。如果我设置
timeout:0
那么它不会超时,它会无限循环。
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 库更好地控制滚动的建议都会很有帮助:) 谢谢。
您可以尝试使用
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()
因为剧作家单击应该在尝试单击之前自动将元素滚动到视图中。