Python + Selenium 截图问题

我需要用 Python + Selenium 爬取网页数据,然后截图,我写了如下代码:

from selenium import webdriver

wb = webdriver.Chrome()
wb.get('xxxxxxxxx')
wb.get_screenshot_as_file('screenshot.png')
wb.quit()

但是这个方法只截到当前可见的页面部分,如果数据过多,就需要下拉滚动条,然后再截图,请问怎样才能实现:下拉滚动条至上次没有截到的位置,再截图,直至页面所有数据都截到。

您可以使用 execute_script 方法来模拟滚动操作,将页面滚动到下一屏数据的位置,然后再进行截图。循环执行这个过程,直至页面所有数据都被截取到为止。下面是一个简单的示例代码:

from selenium import webdriver

wb = webdriver.Chrome()
wb.get('xxxxxxxxx')

# 获取页面总高度
js = "return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight);"
total_height = int(wb.execute_script(js))

# 设置截图尺寸
wb.set_window_size(1920, total_height)

# 设置初始滚动位置
scroll_height = 0

while scroll_height < total_height:
    # 模拟滚动操作
    wb.execute_script(f"window.scrollTo(0, {scroll_height});")

    # 等待页面加载
    time.sleep(1)

    # 截图
    wb.save_screenshot(f"screenshot_{scroll_height}.png")

    # 更新滚动位置
    scroll_height += 1080  # 每次滚动 1080 像素高度

wb.quit()

在这个示例中,我首先使用 JavaScript 获取页面的总高度,然后设置窗口大小为全高度。接着,我们循环执行滚动操作,每次滚动一屏高度(这里设置为 1080 像素),然后等待页面加载完成后截图。最后更新滚动位置,直到滚动到页面底部,所有数据都被截取到。注意,为了避免页面未加载完成就截图,我们在每次滚动后等待 1 秒钟,以确保页面加载完成。