Python selenium PIL 全网页滚动截屏 headless全网页截屏
思路
先截取当前屏幕的图片,获取其高度作为base高度 h,再获取全网页body到尾部的高度 H ,循环截取图片,再通过PIL进行拼接。
代码
# -*- 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()
其他
如果是在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全网页截屏相关推荐
- Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录
https://blog.csdn.net/MrLevo520/article/details/51901579?utm_source=blogxgwz6 转载于:https://www.cnblog ...
- python selenium定位元素方法,python + selenium 练习篇 - 定位元素的方法
1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8 from selenium import webdriver driver = webdriver.Chrome ...
- python+selenium web浏览器全屏长截图的两种方式
1.此方法只适用于能够无头方式运行的浏览器,比如:chrome def get_image(url,pic_name):# chromedriver的路径chromedriver = r"D ...
- Python+Selenium 网页自动化 exe 程序编程实现(最全避坑指南)
前言 在我的日常工作中,经常需要在内网(不连接互联网)的网页版办公系统中进行抓取网页数据.修改表单等大量重复性的操作.我就想是否可以编写出自动化的工具,将这些日常琐碎的操作变得轻松而高效.虽然本人非计 ...
- python+selenium实现网页全屏截图
python+selenium实现网页全屏截图 前言 实现方法采用 Pillow+Selenium,基本原理为:截取多张不同位置的页面,拼接成一个图片 已知情报:Chrome()只能截取当前屏幕展示出 ...
- Python+Selenium+phantomjs实现网页模拟登录和截图
Python+Selenium+phantomjs实现网页模拟登录和截图 本文全部操作均在windows环境下 安装 Python Python是一种跨平台的计算机程序设计语言,它可以运行在Windo ...
- python截长图_利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)
对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素.若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了. WebDriver.Phant ...
- python全局键盘监听(pynput快捷键);利用pywin32快速截屏并生成视频
python全局键盘监听(pynput快捷键):利用pywin32快速截屏并生成视频 第一次在CSDN写博客,有点小紧张(/ω\) 以下内容完全个人理解,有错误请指出~ 最近在用python做一个小工 ...
- Python+Selenium动态网页的信息爬取
录 一.Selenium 1.1 简介 1.2 配置 二.对百度进行自动化测试 2.1 进入百度搜索界面 2.2 自动填充百度网页的查询关键字并完成自动搜索 三.爬取指定网页的名言 3.1 找到元素 ...
最新文章
- bitcoin转账api,python3.7
- python一条语句分析几个常用函数和概念
- 一次有趣的XSS漏洞挖掘分析(1)
- webservice xsd.exe根据xml生成xsd。然后根据xsd生成java bean
- CSS之viewports剖析
- Python生成requirements.txt方法
- Sinowal Bootkit 分析-中国红客网络技术联盟 - Powered by Discuz!
- Security+ 学习笔记54 安全政策
- pci-e串口卡linux 驱动下载,PCI/PCIe卡驱动
- 安装linux播放器mplayer,smplayer
- Log Robust 日志异常检测
- 解析力 (1 )MTF SFR
- 物联网驱动数字化转型
- 所谓计算机网络是指利用通信设备,《计算机应用基础》模拟试卷考卷二含答案...
- php冰蝎一句话,利用动态二进制加密实现新型一句话木马之PHP篇(转)冰蝎
- css引入第三方字体(等宽非衬线)
- C#操作mdb数据库文件
- Julia 语言初学笔记
- 医院有线电视数字前端改造系统分析与解决方案探讨
- 如何使用js实现电影海报画廊特效?