oldtroy 2023-04-19 12:15 采纳率: 84.6%
浏览 25
已结题

Python + Selenium 截图问题

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

from selenium import webdriver

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

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

  • 写回答

2条回答 默认 最新

  • 关注

    您可以使用 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 秒钟,以确保页面加载完成。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月19日

悬赏问题

  • ¥15 SQLServer怎么录入下标
  • ¥100 无网格伽辽金方法研究裂纹扩展的程序
  • ¥15 如何用数码管显示学号(相关搜索:单片机)
  • ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
  • ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
  • ¥50 求一位精通京东相关开发的专家
  • ¥100 求懂行的大ge给小di解答下!
  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'