大型情感剧集Selenium:9_selenium配合Pillow完成浏览器局部截图
网页截图
上次提到了selenium的四种截图方法,最终截图了整张网页。但很多时候,我们仅仅需要截图部分的内容。比如截取某个关键信息,或者现在已经不常见的截图验证码(现在都是各种按规则点击…)。那么我们该如何进行部分元素的截图呢?今天我们就来举个例子…
昨天51test的小编联系,说希望我能给网站投稿关于测试的帖子,要求与测试相关且文章篇幅在1000字以上。
我立马翻了下简书首页,54篇文章5.23万字。除去之前写的几篇灌水帖,字数上貌似达标了。但在学习之外,总结文章至公众号已经很累了,再投稿精力上实在有些扛不住…那么今天就做个练习通过selenium与Pillow,截图红框中的内容吧
代码分析
要局部截图,首先正常的网页登陆后,我们需要定位到这个框体,F12看看如何定位:
我们通过driver.find_element_by_class_name(‘main-top’)即可定位到该元素。
那么接下来需要引入两个方法
element.location
获取element的位置,返回值是一个x,y的坐标点:
{‘x’: 486, ‘y’: 86}
element.size
获取element的元素大小即长和宽,这个比较好理解:
{‘height’: 119, ‘width’: 625}
画地为牢
我们知道了x,y,height,width,如何能把这个元素的四个角框起来呢?用下图说明:
那我们现在要做的就是进行相关的抠图即可。
图片裁剪
Python操作图片的库很多,但最经典的莫过于Pillow了。
Pillow安装
在命令行下输入:pip instlal Pillow 即可
剪切代码
剪切代码我们只需要从Pillow中引入Image子模块,然后使用剪裁方法crop即可实现,代码如下:
img = Image.open('screenshort.png')
title = img.crop((left, top, right, bottom))
title.save('title.png')
最终实现
代码:
# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清风Python
# @Date : 2019/7/15 23:24
# @Software : PyCharm
# @version :Python 3.7.3
# @File : SaveLongPicture.py
import os
from selenium import webdriver
from PIL import Image
class SaveLongPicture:
# 清风Python个人主页
BaseUrl = "https://www.jianshu.com/u/d23fd5012bed"
# 脚本目录
BaseDir = os.path.dirname(os.path.realpath(__file__))
def __init__(self):
self.driver = self.init_driver()
self.long_picture = os.path.join(self.BaseDir, 'BreezePython.png')
@staticmethod
def init_driver():
options = webdriver.ChromeOptions()
options.add_argument('--start-maximized')
options.add_argument('disable-infobars')
return webdriver.Chrome(options=options)
def prepare_work(self):
self.driver.get(self.BaseUrl)
self.driver.add_cookie(cookie)
self.driver.refresh()
self.base_handle = self.driver.current_window_handle
def add_cookie(self):
self.driver.get(self.BaseUrl)
self.driver.add_cookie(cookie)
self.driver.refresh()
def save_crop_img(self):
self.driver.get(self.BaseUrl)
# 定位元素
title = self.driver.find_element_by_class_name('main-top')
# 打印元素位置、元素尺寸
print(title.location, title.size)
# 保存图片
self.driver.get_screenshot_as_file(self.long_picture)
# 元素参数获取
left = title.location.get('x')
top = title.location.get('y')
right = title.size.get('width') + left
bottom = title.size.get('height') + top
# 读取图片
img = Image.open(self.long_picture)
# 图片裁剪
title = img.crop((left, top, right, bottom))
# 局部保存
title.save('title.png')
def run():
# 实例化方法
start_test = SaveLongPicture()
# cookie登陆
start_test.add_cookie()
# 裁剪图片
start_test.save_crop_img()
if __name__ == '__main__':
cookie = {
'name': 'remember_user_token',
'value': ('......')
}
run()
有人会问,明明可以直接访问的,为什么要添加cookie呢?不美观…未登录的情况下,显示的消息是折行的….
当然你可以不登录,然后截图这个元素内容,完全没问题,但是处女座的人有强迫症啊…
The End
今天的selenium内容就更新到这里,如果觉得这篇文章对你有帮助,可以点击文章右下角的“在看”。
欢迎将这篇文章或我的微信公众号【清风Python】
分享给更多喜欢python的人,谢谢你们的支持…..
作者:清风Python
大型情感剧集Selenium:9_selenium配合Pillow完成浏览器局部截图的更多相关文章
- 大型情感剧集Selenium:4_老中医教你(单/多/下拉框)选项定位 #华为云·寻找黑马程序员#
今天讲什么 讲什么标题说了,讲selenium的单选.多选.下拉框选项定位.但其实这东西,没什么太多说的,又比较枯燥,那该怎么让这一集selenium的课程变得有趣呢?有请老中医,哈哈- 怎么样,这个 ...
- 大型情感剧集Selenium:2_options设置 #华为云·寻找黑马程序员#
上集回顾 昨天说简单介绍了什么是selenium,它能干what,和发展史与梗概.当的是python如何通过pip安装selenium,并下载对应浏览器的webdriver. 最后简单通过一个Demo ...
- 大型情感剧集Selenium:8_selenium网页截图的四种方法
有时候,有时候,你会相信一切有尽头-当你的代码走到了尽头,那么保留最后一刻的状态尤为重要,此时你该如何操作?记录日志-没有将浏览器当前的状态进行截图来的直观! 那么,selenium截取截屏,有哪些方 ...
- 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作 #华为云·寻找黑马程序员#
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 大型情感剧集Selenium:3_元素定位 #华为云·寻找黑马程序员#
关于昨天的文章 今天有朋友反馈,代码运行的时候,selenium提示警告 DeprecationWarning: use options instead of chrome_options drive ...
- 大型情感剧集Selenium:1_介绍 #华为云·寻找黑马程序员#
学习selenium能做什么? 很多书籍.文章中是这么定义selenium的: Selenium 是开源的自动化测试工具,它主要是用于Web 应用程序的自动化测试,不只局限于此,同时支持所有基于web ...
- 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作
网站登录 现在各大平台在反爬虫功能上,可谓花样繁多.总结下来按照破解成功率排名,最高的是滑动解锁.其次是验证码数字.之后是一次点击对应的汉字,最后是想12306之前那种反人类的让你说那些是奶糖吧,哈哈 ...
- 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作【华为云技术分享】
网站登录 现在各大平台在反爬虫功能上,可谓花样繁多.总结下来按照破解成功率排名,最高的是滑动解锁.其次是验证码数字.之后是一次点击对应的汉字,最后是想12306之前那种反人类的让你说那些是奶糖吧,哈哈 ...
- 我已看过的TVB剧集目录(陆续更新)
2016年度TVB剧集 <一屋老友记> 主演:欧阳震华,胡定欣,滕丽名,罗兰 <纯熟意外> 主演:吴启华,蔡思贝,李施嬅,黎诺懿 <廉政行动2016> 主演:陈展鹏 ...
随机推荐
- [考试反思]1029csp-s模拟测试92:弱智
我只能这么评价我自己. 看这个提交时间...我没话可说... T1半个世界都A了还是切不掉.又一次挂细节. T2不会证明的乱搞(虽然可以证明)A了没什么可说的算是水过. T3之前水过的题(打的次正解) ...
- [UWP]使用SpringAnimation创建有趣的动画
1. 什么是自然动画 最近用弹簧动画(SpringAnimation)做了两个番茄钟,关于弹簧动画官方文档已经介绍得够详细了,这篇文章就摘录一些官方文档核心内容. 在传统UI中,关键帧动画(KeyFr ...
- 从壹开始 [ Ids4实战 ] 之五 ║ 多项目集成统一认证中心的思考
前言 哈喽大家好,好久都没有写文章了,这次又重新开始写技术文章了,半年前我还是一直保持每周都写文章的,后来是为了响应群友的号召,开始踏上了录制视频(https://www.bilibili.com/v ...
- AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...
- 羞,Java 字符串拼接竟然有这么多姿势
二哥,我今年大二,看你分享的<阿里巴巴 Java 开发手册>上有一段内容说:"循环体内,拼接字符串最好使用 StringBuilder 的 append 方法,而不是 + 号操作 ...
- js数组方法大全(上)
# js数组方法大全(上) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 join() reverse() sort() concat() slice( ...
- windows 2008 服务器优化:停powershell,卸载不相干软件,开启防火墙
windows 2008 作为 全录 的服务器,经常cpu达到100%,查看是powershell.exe占cpu有98%.影响 全录 软件进行电话录音.所以想禁止powershell.exe程序启动 ...
- Java设计模式(20):命令模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 智能电脑的品牌越来越多,由此诞生了一款电脑控制的APP,万能遥控器,用户在使用遥控器的时候,可以切换为自家电视的品 ...
- RabbitMQ 的高可用集群
RabbitMQ 的高可用性 RabbitMQ 是比较有代表性的,因为是基于主从(非分布式)做高可用的 RabbitMQ 有三种模式:单机模式.普通集群模式.镜像集群模式. 单机模式 单机模式,生产几 ...
- Windows下搭建远程Linux主机的图形化本地开发环境
在实际开发中,项目的类生产.生产环境一般都是选择Linux为服务器进行部署. 相应的,我们的开发最好也在Linux环境下进行,否则容易引发其他的问题,比如不同环境下功能不一致.库依赖差异等. 但是Li ...