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日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来