zoukankan      html  css  js  c++  java
  • Selenium基于PIL实现拼接滚动截图(转)

    原文: https://www.jb51.net/article/184464.htm

    Selenium Webdriver的 execute_cdp_cmd()来调用一下Chrome DevTools Protocal提供的方法。但是,很遗憾,没有全屏截图的方法。

    Selenium2时,还可以使用Firefox全屏截图。Selenium3之后,所有浏览器不再支持。

    一种方式是使用aShot,一个jar包,这显然是Java派的解决方案。

    另外如果对样式没有强迫症的话,可以通过滚动页面截取多张+PIL图片拼接的方式实现全屏的截图。

    示例代码: pip install PIL numpy

    from time import sleep
    from PIL import Image
    import numpy as np
    from selenium import webdriver
     
    driver = webdriver.Chrome()
    driver.fullscreen_window() # 全屏窗口
    driver.get('https://www.qq.com/')
    window_height = driver.get_window_size()['height'] # 窗口高度
     
    page_height = driver.execute_script('return document.documentElement.scrollHeight') # 页面高度
    driver.save_screenshot('qq.png')
     
    if page_height > window_height:
      n = page_height // window_height # 需要滚动的次数
      base_mat = np.atleast_2d(Image.open('qq.png')) # 打开截图并转为二维矩阵
     
      for i in range(n):
        driver.execute_script(f'document.documentElement.scrollTop={window_height*(i+1)};')
        sleep(.5)
        driver.save_screenshot(f'qq_{i}.png') # 保存截图
        mat = np.atleast_2d(Image.open(f'qq_{i}.png')) # 打开截图并转为二维矩阵
        base_mat = np.append(base_mat, mat, axis=0) # 拼接图片的二维矩阵
      Image.fromarray(base_mat).save('hao123.png')
     
    driver.quit()

    需要安装PIL和numpy: pip install PIL numpy

    上例中,全屏窗口以获得最大展示范围,通过get_window_size()获取屏幕高度,通过执行js,获取页面高度。
    相除后获得滚动次数。

    每次滚动后,截图保存,然后使用Image打开转换为二维矩阵拼接到上一个图片的二维矩阵中。

    循环完,最后再将拼接的二维矩阵输出成图片。

  • 相关阅读:
    指令级并行:动态调度技术
    单纯形法的矩阵描述
    QTextEdit回车事件重写
    整数规划
    全退
    流水线分析例题
    操作系统期中复习思考题
    流水线技术概述
    中心极限定理
    大数定律
  • 原文地址:https://www.cnblogs.com/lshan/p/14971344.html
Copyright © 2011-2022 走看看