今天学习下使用selenium自动化测试工具获取网页截图。

1,如果是简单获取当前屏幕截图只需要使用方法:

driver.get_screenshot_as_file('screenshot.png')

2,如果想获取完整网页长宽的截图需要设置参数后使用该方法:

首先打开驱动方式设置为无界面显示模式

# 打开驱动
def open_driver():
try:
# 连接浏览器web驱动全局变量
global driver
# Linux系统下浏览器驱动无界面显示,需要设置参数
# “–no-sandbox”参数是让Chrome在root权限下跑
# “–headless”参数是不用打开图形界面 chrome_options = Options()
# 设为无头模式
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
# 连接Chrome浏览器驱动,获取驱动
driver = webdriver.Chrome(chrome_options=chrome_options)
''' # 此步骤很重要,设置chrome为开发者模式,防止被各大网站识别出来使用了Selenium
options = Options()
# 静默模式(加载浏览器的静默模式,让它在后台偷偷运行)
# options.add_argument('headless')
# 去掉提示:Chrome正收到自动测试软件的控制
options.add_argument('disable-infobars')
# 以键值对的形式加入参数,打开浏览器开发者模式
# options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 打开浏览器开发者模式
# options.add_argument("--auto-open-devtools-for-tabs")
driver = webdriver.Chrome(chrome_options=options)
'''
# driver = webdriver.Chrome()
print('连接Chrome浏览器驱动')
# 浏览器窗口最大化
driver.maximize_window()
'''
1, 隐式等待方法
driver.implicitly_wait(最大等待时间, 单位: 秒)
2, 隐式等待作用
在规定的时间内等待页面所有元素加载;
3,使用场景:
在有页面跳转的时候, 可以使用隐式等待。
'''
driver.implicitly_wait(3)
# 强制等待,随机休眠 暂停0-3秒的整数秒,时间区间:[0,3]
time.sleep(random.randint(0, 3)) except Exception as e:
driver = None
print(str(e))

然后设置网页长宽最大化,保证截图是完整的,不会出现滚动条

S = lambda X: driver.execute_script('return document.body.parentNode.scroll' + X)
driver.set_window_size(S('Width'), S('Height'))
driver.get_screenshot_as_file('screenshot.png')

3,编写代码

依旧采用拆分步骤细化功能模块封装方法编写代码,便于后续扩展功能模块,代码中缺少的封装方法代码,详情参考之前的《selenium自动化测试》文章。

def spider_screenshot_image(req_dict):
'''
@方法名称: 爬取网页内容截图文件
@中文注释: 爬取网页内容截图文件
@入参:
@param req_dict dict 请求容器
@出参:
@返回状态:
@return 0 失败或异常
@return 1 成功
@返回错误码
@返回错误信息
@param rsp_dict dict 响应容器
@作 者: PandaCode辉
@weixin公众号: PandaCode辉
@创建时间: 2023-09-26
@使用范例: spider_screenshot_image(req_dict)
''' try:
if (not type(req_dict) is dict):
return [0, "111111", "请求容器参数类型错误,不为字典", [None]] # 截图目录
screenshot_dir = os.path.join(os.path.dirname(__file__), 'screenshot')
if not os.path.exists(screenshot_dir):
os.makedirs(screenshot_dir) print('打开浏览器驱动')
open_driver() # 打开网址网页
print('打开网址网页')
driver.get(req_dict['url'])
# 等待6秒启动完成
driver.implicitly_wait(6)
print('随机休眠')
# 随机休眠 暂停0-2秒的整数秒
time.sleep(random.randint(0, 2)) # 保存当前网页屏幕快照PNG图像文件,截图不保证完整网页内容都截取到
page_file_1 = os.path.join(screenshot_dir, 'page1.png')
isprint = driver.get_screenshot_as_file(page_file_1)
print(isprint) # 网页长宽最大化,保证截图是完整的,不会出现滚动条
S = lambda X: driver.execute_script('return document.body.parentNode.scroll' + X)
driver.set_window_size(S('Width'), S('Height')) # 保存当前网页屏幕快照PNG图像文件
page_file_2 = os.path.join(screenshot_dir, 'page2.png')
isprint = driver.get_screenshot_as_file(page_file_2)
print(isprint) # 章节内容截图
image_file = os.path.join(screenshot_dir, 'content.png')
# 元素定位
elem = driver.find_element(By.ID, req_dict['elem_id'])
print(elem)
# 元素截图
isprint = elem.screenshot(image_file)
print(isprint) print('关闭浏览器驱动')
close_driver() print("爬取网页内容截图文件成功")
# 返回容器
return [1, '000000', '爬取网页内容截图文件成功', [None]] except Exception as e:
print('关闭浏览器驱动')
close_driver()
print("爬取网页内容截图文件异常," + str(e))
return [0, '999999', "爬取网页内容截图文件异常," + str(e), [None]]

4,运行效果

最后说明:上述文章仅供学习参考,请勿用于商业用途,感谢阅读。

selenium自动化测试-获取网页截图的更多相关文章

  1. 大型情感剧集Selenium:8_selenium网页截图的四种方法

    有时候,有时候,你会相信一切有尽头-当你的代码走到了尽头,那么保留最后一刻的状态尤为重要,此时你该如何操作?记录日志-没有将浏览器当前的状态进行截图来的直观! 那么,selenium截取截屏,有哪些方 ...

  2. Python3.X Selenium 自动化测试中如何截图并保存成功

    在selenium for python中主要有三个截图方法,我们挑选其中最常用的一种. 挑最常用的:get_screenshot_as_file() 相关代码如下:(下面的代码可直接复制) # co ...

  3. Python+Selenium 自动化测试获取测试报告内容并发送邮件

    这里封装一个send_mail()方法,用于测试完成后读取测试报告内容,并将测试结果通过邮件发送到接收人 # coding: utf-8 import smtplib from email.mime. ...

  4. Python中使用 Selenium 实现网页截图实例

    Selenium 是一个可以让浏览器自动化地执行一系列任务的工具,常用于自动化测试.不过,也可以用来给网页截图.目前,它支持 Java.C#.Ruby 以及 Python 四种客户端语言.如果你使用 ...

  5. 记一个Selenium自动化测试网页

    今天想跟大家分享的是Selenium自动化测试网页,就是关于selenium的自动化测试一些基础的东西,如有不对的地方请多多指教. 一.安装环境 1.Python环境 安装完成后通过Windows命令 ...

  6. 《手把手教你》系列技巧篇(五十九)-java+ selenium自动化测试 - 截图三剑客 -上篇(详细教程)

    1.简介 今天本来是要介绍远程测试的相关内容的,但是宏哥在操作服务器的时候干了件糊涂的事,事情经过是这样的:本来申请好的Windows服务器用来做演示的,可是服务器可能是局域网的,连百度都不能访问,宏 ...

  7. 《手把手教你》系列技巧篇(六十一)-java+ selenium自动化测试 - 截图三剑客 -下篇(详细教程)

    1.简介 按照计划宏哥今天将介绍java+ selenium自动化测试截图操作实现的第三种截图方法,也就是截图的第三剑客 - 截取某个元素(或者目标区域)的图片.在测试的过程中,有时候不需要截取整个屏 ...

  8. Python3 Selenium WebDriver网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作

    Python3 Selenium WebDriver网页的前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 通过selenium webdr ...

  9. 使用selenium的方式获取网页中图片的链接和网页的链接,来判断是否是死链(二)

    上一篇使用Java正则表达式来判断和获取图片的链接以及跳转的网址,这篇使用selenium的自带的API(getAttribute)来获取网页中指定的内容 实现内容:获取下面所有图片的链接地址以及跳转 ...

  10. Selenium WebDriver-网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作

    通过selenium webdriver操作网页前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 from selenium import ...

随机推荐

  1. Qt编写地图综合应用9-行政区划

    一.前言 行政区划在地图应用中非常有用,行政区划是行政区域划分的简称,是国家为了进行分级管理而实行的区域划分,百度地图提供的内置的函数类支持传入行政区划的名称来获取对应的边界点集合,然后根据该集合来绘 ...

  2. MySQL数据库建库时SQL语句中数据库名、表名用引号的问题以及COLLATE utf8_general_ci的含义

    一.MySQL数据库建库时SQL语句中数据库名.表名用引号的问题解释:在创建MySQL数据库和表时,数据库名.表名和字段名外面的符号 ` 不是单引号,而是英文输入法的反单引号,同键盘~同一位置.为了避 ...

  3. OGC——WMS服务

    一.引言 一直用arcgis javascript的二次开发,经常使用它的一些服务WMS.WMTS.WFS.MapService等,并没有深入了解这些服务内部机制,直到最近学习了geoserver,由 ...

  4. 树莓派Zero OLED屏幕转接板

    买了个树莓派Zero,emmm,拿到手后感觉很精巧,但是总是感觉少了什么.于是... 瞎吹一波:不得不说嘉立创公司确实给力,一条龙服务而且价格太便宜了. 焊接组装上机测试,OK! 其实这个过程中坑也踩 ...

  5. PHP 安装启用openssl(解决 wordpress可选的模组openssl未被安装或已被禁用)

    本教程仅适用Windows Servier IIS网站服务器. 我的博客使用IIS搭建,相比Linux,相关的教程格外少.因此让以后的小伙伴也能马上解决问题,分享此方法. 首先需要下载php对应版本的 ...

  6. Solution -「洛谷 P8477」 「GLR-R3」春分 下界证明?!

      前情提要:在「洛谷 P8477」 「GLR-R3」春分中,我们给出了 \(\frac{7}{6}n\pm\mathcal O(1)\) 的解法,但没能给出相关的下界证明.现在我们尝试给出一个未完全 ...

  7. 第二章 dubbo源码解析目录

    6.1 如何在spring中自定义xml标签 dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个 ...

  8. 史上最全memcached面试26题和答案

    Memcached是什么? Memcached是一个开源的,高性能的内存绶存软件,从名称上看Mem就是内存的意思,而Cache就是缓存的意思. Memcached的作用? Memcached的作用:通 ...

  9. 项目PMP之一项目管理介绍

    一.项目定义: 概要:为创造独特的产品.服务或成果而进行的临时性工作 组织创造价值和效益.项目驱动变更创造商业价值的主要方式 特性/要素: 独特的产品.服务或成果,即一个或多个可交付成果(范围.进度( ...

  10. Kotlin:【定义类】field、计算属性、防态竞争条件