python实现网页长截图
python实现网页长截图
- 实现思路
- 使用工具和第三方库
- 参考内容网址
- 具体代码案例
实现思路
- 获取到所需内容
- 截图、移动、截图、移动…
- 拼接
使用工具和第三方库
- Python、Pycharm
- PIL
- selenium
- webdriver安装
参考内容网址
- selenium网址
https://www.selenium.dev/documentation/en/webdriver/ - webdriver安装
https://blog.csdn.net/weixin_43333607/article/details/115370243
具体代码案例
from selenium import webdriver
from PIL import Image
import time
def short_sc(el,b):start_higth = el.location["y"]js = "scrollTo(0,%s)" % (start_higth)b.execute_script(js) # 执行jstime.sleep(0.5)fp = r"D:\Workspace\HandleData\Picture\test.png" # 图片地址b.get_screenshot_as_file(fp)img = Image.open(fp=fp)img2 = img.crop((el.location["x"], 0, el.size["width"] + el.location["x"], el.size["height"])) # 剪切图片img2.save(fp)
def long_sc(el,b):count = int(el.size["height"] / sc_hight) # 元素的高度除以你每次截多少就是次数start_higth = el.location["y"] # 元素的初始高度max_px = start_higth + (count - 1) * sc_hight # for循环中最大的pxlast_px = el.size["height"] + start_higth - sc_hight # 元素最底部的位置surplus_px = last_px - max_px # 剩余的边的高度img_path = [] # 用来存放图片地址for i in range(0, count):js = "scrollTo(0,%s)" % (start_higth + i * sc_hight) # 用于移动滑轮b.execute_script(js) # 执行jstime.sleep(0.5)fp = r"D:\Workspace\HandleData\Picture\%s.png" % i # 图片地址,运行的话,改一下b.get_screenshot_as_file(fp) # 屏幕截图,这里是截取是完整的网页图片,你可以打断点看一下图片img = Image.open(fp=fp)img2 = img.crop((el.location["x"], 0, el.size["width"] + el.location["x"], sc_hight)) # 剪切图片img2.save(fp) # 保存图片,覆盖完整的网页图片img_path.append(fp) # 添加图片路径time.sleep(0.5)print(js)else:js = "scrollTo(0,%s)" % last_px # 滚动到最后一个位置b.execute_script(js)fp = r"D:\Workspace\HandleData\Picture\last.png"b.get_screenshot_as_file(fp)img = Image.open(fp=fp)print((el.location["x"], sc_hight - surplus_px, el.size["width"] + el.location["x"], sc_hight))img2 = img.crop((el.location["x"], sc_hight - surplus_px, el.size["width"] + el.location["x"], sc_hight))img2.save(fp)img_path.append(fp)print(js)new_img = Image.new("RGB", (el.size["width"], el.size["height"])) # 创建一个新图片,大小为元素的大小k = 0for i in img_path:tem_img = Image.open(i)new_img.paste(tem_img, (0, sc_hight * k)) # 把图片贴上去,间隔一个截图的距离k += 1else:new_img.save(r"D:\Workspace\HandleData\Picture\test.png") # 保存driver=r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
b=webdriver.Chrome(executable_path=driver)#指定一下driver
b.get("https://www.w3school.com.cn/html/html_links.asp")
b.maximize_window()#最大化窗口
# b.get_screenshot_as_file(fp)
sc_hight=840#你屏幕截图默认的大小,
# 相当于索引的方式,这个使用标签索引,body可以获取全屏
el=b.find_element_by_tag_name("body")if el.size["height"]>sc_hight:long_sc(el,b)
else:short_sc(el,b)
除了使用标签名进行索引自己所截内容外还可使用类名、id、css等。
python实现网页长截图相关推荐
- 电脑qq浏览器怎么滚动截长图_Mac系统如何轻松实现网页长截图功能
Mac 网页长截图 在日常工作生活中,我们经常需要使用到截图功能,简单的一页截图使用常用的截图工具即可,但是有时会碰到需要截图多页内容或者整个网页,使用截图工具分页截图再拼接不仅复杂而且耗时. 那么针 ...
- 浏览器无需下载插件 解决网页长截图的小技巧
作为前端开发人员,可能会经常需要截取一些网页的整张图片,大家平时可能使用计算机自带截图或者QQ.微信等截图快捷键来截取某部位图,实现不了全站长截图. 当然,360浏览器可使用快捷键 Ctrl+M 来截 ...
- 某个网页一直不停刷新_利用浏览器做网页长截图
在平时写文章的时候,我经常需要插入一些截图,不知你有没有注意到,在能使用手机截图的情况下,我都尽量不在 PC 上进行截取操作. 其实有如下几个理由: 基于微信平台下,大多数用户使用手机进行阅读,在电脑 ...
- java selenium div内嵌滚动条 网页长截图发邮件
java selenium 网页内嵌滚动条截图发邮件 主要问题 下面展开说 由于公司要求做一个接口,请求这个接口进行网页截图并发送邮件的功能,本来前期是用python写好了,but似乎不太符合要求,那 ...
- Chrome浏览器 网页长截图方法
平时我们在浏览网页的时候,碰到自己喜欢的页面,想要截图而自己的显示器窗口高度有限,我下面将为大家分享这种方式,获得整个网页的截图.一起来开始吧: 首先,我们用到的浏览器是谷歌的Chrome浏览器. 第 ...
- 使用Chrome浏览器实现网页长截图 无需安装插件
有些网页比较长,一屏装不下,需要拉动滚动条才行,这种网页我们想截图截取全部内容时就比较困难 如果使用的是Chrome浏览器,可以使用如下方法截图: 打开网页后 按快捷键 F12 打开移动设备预览模式( ...
- python实现网页/HTML截图并转PDF
通过Python,Node等服务端程序对现有网站或者HTML文件在不打开浏览器窗口的情况下进行截图,可以很方便的实现某些需求.如 实现办公自动化,将数据制作成<tr><td>表 ...
- python 打开网页并截图_python自动获得网页上的所有超链接并全部截图
需要安装python的selenium模块,这是一个浏览器自动化的框架.然后我是使用chrome浏览器的,所以还需要安装一个chromedriver.还有一个爬虫框架bs4. selenium和bs4 ...
- Chrome 浏览器 原生工具进行网页长截图
在想要截图的网页中,首先按下 Ctrl + Shift + I(或直接 F12 )快捷键,召唤出调试界面. 随后,按下 (Ctrl + Shift + P) ,输入命令 Capture full s ...
最新文章
- 基于java的InputStream.read(byte[] b,int off,int len)算法学习!
- 记录一次java.lang.OutOfMemoryError: PermGen space异常
- 计算机xp怎么做备份,怎样备份xp系统电脑上的所有数据?在xp系统中备份所有文件的方法...
- MySQL日期及时间加减函数
- 巨人的魔法——腾讯打造会思考的数据中心
- Uuntu16.04重装后u盘不识别问题解决
- pandas读取csv某一列_让pandas处理大数据速度变快的三个技巧
- TensorFlow2.0:常用数据范围压缩函数
- 吴颖二:12.27 什么是现货,如何操作才能盈利
- brew update:以下未跟踪的工作树文件将被合并覆盖:
- redis 慢消费_Redis精进:List的使用和应用场景
- .Net环境下有关打印页面设置、打印机设置、打印预览对
- Android SIP软电话,通话录音,VoIP电话,linphone电话
- 测试驱动开发(TDD)开发思路
- mysql数据库去重
- 有关sim800l的资料
- vscode 设置关键字高亮显示
- 【图像分类】YOLOv5-6.2全新版本:支持图像分类
- Oracle——武汉空间数据库系统设计
- Hadoop中怎么解决Starting secondary namenodes [0.0.0.0]