python+selenium实现网页全屏截图
python+selenium实现网页全屏截图
前言
实现方法采用 Pillow+Selenium,基本原理为:截取多张不同位置的页面,拼接成一个图片
已知情报:Chrome()只能截取当前屏幕展示出的网页,本篇文章是针对webdriver.Chrome()
的全屏幕截取解决方法
开始写代码之前我们必须要明确我们的最终目的,即截取到整个网页。根据这个需求,分解出多个问题点:
- 如何网页截屏?
- 什么样的网页有完整截取的需求?
- 如何截取到全部的网页?
- 如何拼接截取到的部分网页截图?
带着上面的问题让我们开始吧!
开始
目标网站:https://www.csdn.net/
首先要知道怎么在网页中截图
from selenium import webdriverdriver = webdriver.Chrome()
# 设置浏览器窗口最大化
driver.maximize_window() # 设置打开页面最大化,目的是更好的截取错误图
# 打开税网
driver.get("https://www.csdn.net/")
# 1. 截取当前页面
driver.save_screenshot('result.png')
上面执行的是截取当前展示出来的页面,但并不是我们要的完整页面,所以要截取多张图
from PIL import ImageJS = {'滚动到页尾': "window.scroll({top:document.body.clientHeight,left:0,behavior:'auto'});",'滚动到': "window.scroll({top:%d,left:0,behavior:'auto'});",
}
# 获取body大小
body_h = int(driver.find_element_by_xpath('//body').size.get('height'))
# 计算当前页面截图的高度
# (使用driver.get_window_size()也可以获取高度,但有误差,推荐使用图片高度计算)
current_h = Image.open('result.png').size[1]
image_list = ['result.png'] # 储存截取到的图片路径for i in range(1, int(body_h/current_h)):# 1. 滚动到指定锚点driver.execute_script(JS['滚动到'] % (current_h * i))# 2. 截图driver.save_screenshot(f'test_{i}.png')join_images('result.png', f'test_{i}.png')
# 处理最后一张图
driver.execute_script(JS['滚动到页尾'])
driver.save_screenshot('test_end.png')
# 拼接图片
join_images('result.png', 'test_end.png', size=current_h-int(body_h % current_h))
拼接图片的join_images方法,参考自Ivy丶大神的博文python图片拼接
def join_images(png1, png2, size=0, output='result.png'):"""图片拼接:param png1: 图片1:param png2: 图片2:param size: 两个图片重叠的距离:param output: 输出的图片文件:return:"""# 图片拼接img1, img2 = Image.open(png1), Image.open(png2)size1, size2 = img1.size, img2.size # 获取两张图片的大小joint = Image.new('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)
运行效果:
相关资料:
python图片拼接
python+selenium实现网页全屏截图相关推荐
- Python+Selenium动态网页的信息爬取
录 一.Selenium 1.1 简介 1.2 配置 二.对百度进行自动化测试 2.1 进入百度搜索界面 2.2 自动填充百度网页的查询关键字并完成自动搜索 三.爬取指定网页的名言 3.1 找到元素 ...
- [python]利用Selenium实现网页全屏截图+部分截图并web实现
好久都没有写文章了,今天记录一下. 实现目标 我的目标是输入一段网址,能够得到该网页的一部分截图. 思路: 根据网址打开网页 先全屏截图,再保存成图片 之后对这张图片进行部分截图 代码 我不需要滚动截 ...
- python selenium 获取网页源代码
获取网页源代码: 引入组件:[from selenium import webdriver]. [from selenium.webdriver.chrome.options import Optio ...
- Python selenium操作浏览器全屏截图
最近完成一个需求,需要对监控页面全屏截图,并存储成图片上传到oss. 先简短记录下最终的解决方式,后续有空完善细节及代码注释. 网上找了很多资料,全屏截图的确可以,但是如果有代码小scroll的页面无 ...
- Python+Selenium 网页自动化 exe 程序编程实现(最全避坑指南)
前言 在我的日常工作中,经常需要在内网(不连接互联网)的网页版办公系统中进行抓取网页数据.修改表单等大量重复性的操作.我就想是否可以编写出自动化的工具,将这些日常琐碎的操作变得轻松而高效.虽然本人非计 ...
- Python HTMLTestRunner生成网页自动化测试报告时中文编码报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6...
1. 由于使用Python Selenium做网页自动化测试时,有截取网页上的中文信息保存到测试结果中,最终出现编码错误如下: File "D:/PycharmProjects/AutoTe ...
- Python Selenium.WebDriver 最强详解页面加载策略
Python Selenium.WebDriver 网页加载策略『详细』 文章目录 Python Selenium.WebDriver 网页加载策略『详细』 一.网页加载策略
- python自动访问网页_Python自动化 selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?...
相信大家在使用selenium做网页自动化时,会遇到如下这样的一个场景: 在你使用get访问某一个网址时,会在页面中弹出如上图所示的弹出框. 首先想到是利用Alert类来处理它. 然而,很不幸,Ale ...
- Python selenium —— 用chrome的Mobile emulation模拟手机浏览器测试手机网页
很多人发现chrome有项功能,就是在开发者工具里能够模拟手机打开网页,便想能否用selenium对此进行自动化测试.答案当然是yes! 今天博主便给大家分享下如何用chrome的MobileEmul ...
最新文章
- redis 自减命令_Redis 实战 —— 04. Redis 数据结构常用命令简介
- VTK:隐式球体用法实战
- .Net Core with 微服务 - 架构图
- Java访问静态常量_Java如何在Spring EL中访问静态方法或常量?
- centos7 下 sudo yum install 报错镜像找不到
- [Python WEB开发] 使用WSGI开发类Flask框架 (二)
- 错误解决:当前目录下有so,提示 error while loading shared libraries
- 学生请假管理系统--UML画图
- STK和c语言集成开发,STKX组件实现c#与stk的集成.pdf
- allegro 过孔删除不掉
- 干货丨1.3万字简述,PRD到底怎么写
- 美国乡村音乐历史[[[磁性的声音-成熟男人的味道-John Michael Montgomery]]]
- 【Python百日进阶-Web开发-Feffery】Day378 - fac数据展示17:AntdTable 表格 (5)示例:表格校验、监听
- 关于微信小程序跳转到H5,然后从H5又跳回微信小程序问题的资料
- Eclipse Error - Error notifying a preference...
- 利用Java求解“鸡兔同笼问题”:鸡和兔在一个笼子里,共有腿100条,头40个,问鸡兔各有几只?
- 心得体会标题大全_心得体会题目大全
- 【动画消消乐 】HTML+CSS 吃豆豆动画 073
- 生命不息,折腾不止 ~ 旧PC改造之家庭影音
- 使用ThreeJs从零开始构建3D智能仓库——第一章(一切的基础)