点此免费加入Python网络爬虫学习交流QQ群:428518750

有些页面的内容不是打开页面时直接加载的,需要我们滚动页面,直到页面的位置显示在屏幕上时,才会去请求服务器,加载相关的内容。所以,有时候我们就需要模拟页面向下滚动的操作。

使用JS语句模拟向下滚动页面

可以使用JS语句,定位滚动条的位置到最下面,从而实现页面的向下滚动。

语法如下:

page.evaluate("var q=document.documentElement.scrollTop=滚动条的位置")

代码示例:

from playwright.sync_api import Playwright, sync_playwright, expect

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://sql.wang/playwright/screenshot/")
    page.evaluate("var q=document.documentElement.scrollTop=50000")
    page.mouse.wheel(0,7000)
    page.wait_for_timeout(20000)

    page.close()
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

ps. 使用JS语句滚动页面的方法,从效果上来看,是一下子跳到指定位置的。如果从页头到指定位置中间还有很多内容需要懒加载,不知道会不会触发页面的加载。

另外,上面的语句虽然可以实现向下滚动到页面底部(通过向下滚动一个超大长度实现),但无法实现精确向下滚动到页面底部。使用下面的JS语句,可以实现精确滚动到底部:

page.evaluate("() => window.scrollTo(0,document.body.scrollHeight)")

使用滚动鼠标的方式模拟向下滚动页面

在浏览器页面上,我们也可以使用滚动鼠标命令,模拟向下滚动页面。

语法如下:

page.mouse.wheel(向右滚动长度,向下滚动长度)

代码示例:

from playwright.sync_api import Playwright, sync_playwright, expect

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://sql.wang/playwright/screenshot/")
    page.mouse.wheel(0,7000)
    page.wait_for_timeout(20000)
    
    page.close()
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

点此免费加入Python网络爬虫学习交流QQ群:428518750

picture loss