selenium自动化测试+获取验证码图片

news/2024/7/5 20:46:17

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

所谓自动化测试,就是通过电脑模拟人为的输入测试。

Selenium  是一个用于Web应用程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样。Selenium 的核心,也称browser bot,是用 JavaScript 编写的,这使得测试脚本可以在受支持的浏览器中运行。但是每个浏览器访问方式是不一样的,所以需要安装对应浏览器的webdriver,才能在相应的浏览器上进行测试。

python+selenium的组合方式,会极大的减轻人工输入的工作量。本人目前是采用的win7+python3.7的环境。下面讲一下怎么使用selenium。

1,安装selenium,直接通过命令:

pip install -U selenium

2,添加浏览器驱动webdriver支持

由于本人采用的chrome46,所以下载的webdriver要与相应webdriver支持的版本对应,怎么知道webdriver支持的chrome版本,请看:

https://sites.google.com/a/chromium.org/chromedriver/downloads

然后根据当前chrome版本,选择合适的webdriver:

https://chromedriver.storage.googleapis.com/index.html

然后将解压后的exe文件(chromedriver.exe)放在python安装目录,即python.exe同一目录下。使用其它浏览器时,需要下载其它浏览器对应的webdriver。

3,测试代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("selenium")

上面的代码将打开chrome浏览器,并在搜索文本框中输入selenium。

4,获取验证码图片

获取验证码图片时,不能通过下面这种方式获取:

r = requests.get(url, stream=True, timeout=60)
        r.raise_for_status()
        with open(filename, 'wb') as f:
            for chunk in r.iter_content(chunk_size=1024):
                if chunk:  # filter out keep-alive new chunks
                    f.write(chunk)
                    f.flush()

这种方式会重新发送请求来获取图片,但是重新请求后验证码肯定会改变,所以我们只能通过截屏的方式来获取验证码。

# encoding:utf-8
from PIL import Image
from selenium import webdriver
import time

url = 'http://www.scliangfu.com/Themes/Manages/Login.aspx'
driver = webdriver.Chrome()
driver.maximize_window()  # 将浏览器最大化
driver.get(url)
# 截取当前网页并放到E盘下命名为printscreen,该网页有我们需要的验证码
time.sleep(1)
driver.save_screenshot('E:\\printscreen.png') 

imgelement = driver.find_element_by_xpath('//*[@id="Image1"]')  # 定位验证码
location = imgelement.location  # 获取验证码x,y轴坐标
size = imgelement.size  # 获取验证码的长宽
rangle = (int(location['x']), int(location['y']), int(location['x'] + size['width']),
          int(location['y'] + size['height']))  # 写成我们需要截取的位置坐标
i = Image.open("E:\\printscreen.png")  # 打开截图
frame4 = i.crop(rangle)  # 使用Image的crop函数,从截图中再次截取我们需要的区域
frame4.save('E:\\save.jpg') # 保存我们接下来的验证码图片 进行打码


driver.close()

上面的代码可以直接运行,将验证码(id="Image1")的图片截屏裁剪出来。

 

转载于:https://my.oschina.net/moluyingxing/blog/2997353


http://www.niftyadmin.cn/n/1897487.html

相关文章

跟我学Spring Cloud(Finchley版)-06-服务注册与服务发现-Eureka深入

为什么80%的码农都做不了架构师?>>> 在跟我学Spring Cloud(Finchley版)-05-服务注册与服务发现-Eureka入门 一节中,已经编写了一个Eureka Server,并将服务提供者与消费者都注册到了Eureka Server上。 本节…

vuejs开发H5页面总结

最近参与了APP内嵌H5页面的开发,这次使用vuejs替代了jQuery,仅仅把vuejs当做一个库来使用,效率提高之外代码可读性更强,在此分享一下自己的一些开发中总结的经验。 关于布局方案 当拿到设计师给的UI设计图,前端的首要任…

苹果承认iOS存“1970”变砖漏洞 将发布系统更新

北京时间2月16日消息,据科技博客9to5mac报道,上周,有用户发现,在将iOS设备的系统日期设置为1970年1月1日后,iPhone、iPad或iPod touch就会立刻“变砖”。在对系统日期进行上述调整后,iPhone或其它iOS设备将…

好文推荐:有赞透明多级缓存解决方案(TMC)

专注于Java领域优质技术号,欢迎关注作者:有赞技术团队一、引子1-1. TMC 是什么TMC ,即“透明多级缓存( Transparent Multilevel Cache )”,是有赞 PaaS 团队给公司内应用提供的整体缓存解决方案。TMC 在通用…

python io密集 多线程_python中同步、多线程、异步IO、多线程对IO密集型的影响

1、常见并发类型I/ O密集型:蓝色框表示程序执行工作的时间,红色框表示等待I/O操作完成的时间。此图没有按比例显示,因为internet上的请求可能比CPU指令要多花费几个数量级的时间,所以你的程序可能会花费大部分时间进行等待。CPU密…

金融安防的市场现状及发展趋势

随着安防设备高清化、网络化、智能化的发展,云计算、云存储等大数据的相关技术也在不断渗入到金融安防领域,使金融安防行业有了更多的增长点,这也引来了不少安防企业进军金融安防市场。金融领域一直是安防企业关注的重点,但是近几…

强化学习原理与python实现原理pdf_非常干货:Python 探针实现原理

点击上方“Python编程时光”,选择“加为星标”第一时间关注Python技术干货!原文:https://segmentfault.com/a/1190000004889212大家好,我是明哥。关于 Python 的导入机制,我以前写过一篇文章,非常详细&…

NodeJS应用程序设置为window service-辅助工具(C#)

1、修改nssm,去对话框后 2、生成批处理文件,执行 3、将nssm.exe、node.exe放在资源文件里面 附代码 工具 本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/p/3284978.html,如需转载请自行联系原作者…