1. 思路

    ​ 先截取当前屏幕的图片,获取其高度作为base高度 h,再获取全网页body到尾部的高度 H ,循环截取图片,再通过PIL进行拼接。

  2. 代码

    # -*- coding:utf-8 -*-
    # author: donttouchkeyboard@gmail.com
    # software: PyCharm
    import osfrom PIL import Image
    from time import sleepclass ScreenShot:__JS__ = {'scroll_to_bottom': "window.scroll({top:document.body.clientHeight,left:0,behavior:'auto'});",'scroll_to_y': "window.scroll({top:%d,left:0,behavior:'auto'});",}__base_end__ = 'tmp_end.png'__scroll_bottom__ = 'scroll_to_bottom'__scroll_y__ = 'scroll_to_y'__body__ = '//body'__height__ = 'height'__clear_shell__ = 'rm -rf *.png'__RGB__ = 'RGB'@classmethoddef screen_shot(cls, driver, title, uploader_url='', delete=False):"""全网页滚动截屏:param driver: webdriver 示例:param title: 标题(最终图片命名):param uploader_url: 上传url:param delete: 是否清除所有图片:return:"""base_image = '{}.png'.format(title)driver.save_screenshot(base_image)body_h = int(driver.find_element_by_xpath(cls.__body__).size.get(cls.__height__))current_h = Image.open(base_image).size[1] / 2for i in range(1, int(body_h / current_h)):driver.execute_script(cls.__JS__[cls.__scroll_y__] % (current_h * i))sleep(.5)driver.save_screenshot(f'tmp_{i}.png')cls.__join_images__(base_image, f'tmp_{i}.png', 0, base_image)driver.execute_script(cls.__JS__[cls.__scroll_bottom__])driver.save_screenshot(cls.__base_end__)cls.__join_images__(base_image, cls.__base_end__, int(current_h - int(body_h % current_h)), base_image)# TODO 上传图片url = ''# 移除图片if delete:os.system(cls.__clear_shell__)return url@classmethoddef __join_images__(cls, png1, png2, size=0, output='result.png'):"""图片拼接:param png1: 图片1:param png2: 图片2:param size: 两个图片重叠的距离:param output: 输出的图片文件:return:"""size = size * 2img1, img2 = Image.open(png1), Image.open(png2)size1, size2 = img1.size, img2.sizejoint = Image.new(cls.__RGB__, (size1[0], size1[1] + size2[1] - size))loc1, loc2 = (0, 0), (0, size1[1] - size)joint.paste(img1, loc1)joint.paste(img2, loc2)joint.save(output)if __name__ == '__main__':from selenium import webdriverdriver = webdriver.Chrome()driver.get("https://www.cnblogs.com/worldline/")ScreenShot.screen_shot(driver, 'worldline')driver.quit()
  3. 其他

    如果是在headless模式,可以使用

    
    def get_image(url, pic_name):"""适用于无头全屏截图:param url: url访问路径:param pic_name: 图片名称:return:"""chrome_options = Options()chrome_options.add_argument('headless')driver = webdriver.Chrome(options=chrome_options)driver.get(url)time.sleep(.5)width = driver.execute_script("return document.documentElement.scrollWidth")height = driver.execute_script("return document.documentElement.scrollHeight")print(width, height)driver.set_window_size(width, height)time.sleep(.5)driver.save_screenshot(pic_name)driver.close()
    

Python selenium PIL 全网页滚动截屏 headless全网页截屏相关推荐

  1. Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录

    https://blog.csdn.net/MrLevo520/article/details/51901579?utm_source=blogxgwz6 转载于:https://www.cnblog ...

  2. python selenium定位元素方法,python + selenium 练习篇 - 定位元素的方法

    1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8 from selenium import webdriver driver = webdriver.Chrome ...

  3. python+selenium web浏览器全屏长截图的两种方式

    1.此方法只适用于能够无头方式运行的浏览器,比如:chrome def get_image(url,pic_name):# chromedriver的路径chromedriver = r"D ...

  4. Python+Selenium 网页自动化 exe 程序编程实现(最全避坑指南)

    前言 在我的日常工作中,经常需要在内网(不连接互联网)的网页版办公系统中进行抓取网页数据.修改表单等大量重复性的操作.我就想是否可以编写出自动化的工具,将这些日常琐碎的操作变得轻松而高效.虽然本人非计 ...

  5. python+selenium实现网页全屏截图

    python+selenium实现网页全屏截图 前言 实现方法采用 Pillow+Selenium,基本原理为:截取多张不同位置的页面,拼接成一个图片 已知情报:Chrome()只能截取当前屏幕展示出 ...

  6. Python+Selenium+phantomjs实现网页模拟登录和截图

    Python+Selenium+phantomjs实现网页模拟登录和截图 本文全部操作均在windows环境下 安装 Python Python是一种跨平台的计算机程序设计语言,它可以运行在Windo ...

  7. python截长图_利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)

    对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素.若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了. WebDriver.Phant ...

  8. python全局键盘监听(pynput快捷键);利用pywin32快速截屏并生成视频

    python全局键盘监听(pynput快捷键):利用pywin32快速截屏并生成视频 第一次在CSDN写博客,有点小紧张(/ω\) 以下内容完全个人理解,有错误请指出~ 最近在用python做一个小工 ...

  9. Python+Selenium动态网页的信息爬取

    录 一.Selenium 1.1 简介 1.2 配置 二.对百度进行自动化测试 2.1 进入百度搜索界面 2.2 自动填充百度网页的查询关键字并完成自动搜索 三.爬取指定网页的名言 3.1 找到元素 ...

最新文章

  1. bitcoin转账api,python3.7
  2. python一条语句分析几个常用函数和概念
  3. 一次有趣的XSS漏洞挖掘分析(1)
  4. webservice xsd.exe根据xml生成xsd。然后根据xsd生成java bean
  5. CSS之viewports剖析
  6. Python生成requirements.txt方法
  7. Sinowal Bootkit 分析-中国红客网络技术联盟 - Powered by Discuz!
  8. Security+ 学习笔记54 安全政策
  9. pci-e串口卡linux 驱动下载,PCI/PCIe卡驱动
  10. 安装linux播放器mplayer,smplayer
  11. Log Robust 日志异常检测
  12. 解析力 (1 )MTF SFR
  13. 物联网驱动数字化转型
  14. 所谓计算机网络是指利用通信设备,《计算机应用基础》模拟试卷考卷二含答案...
  15. php冰蝎一句话,利用动态二进制加密实现新型一句话木马之PHP篇(转)冰蝎
  16. css引入第三方字体(等宽非衬线)
  17. C#操作mdb数据库文件
  18. Julia 语言初学笔记
  19. 医院有线电视数字前端改造系统分析与解决方案探讨
  20. 如何使用js实现电影海报画廊特效?

热门文章

  1. HBCK2修复RIT实践笔记
  2. IMX8M系列 yocto编译镜像及demo编译(MYD-JX8MX)
  3. 从世界棒球经典赛,到MLB新赛季到来!
  4. Java Activiti(4)--查询历史任务数据等信息
  5. 4K超高清+光学变焦,用极米H6 4K版追热播剧太爽了
  6. Linux-CentOS系统安装telnet服务和telnet-server服务器教程--解决telnet无法连接 Connection refused
  7. 【MATLAB函数】function定义函数
  8. 常用网址收藏 防止迷路
  9. 2020/4/21 事件1
  10. Seaborn的简述