- 1)使用库操作谷歌浏览器,打开目标网站;
- 2)对目标网站进行截图,并将图片保存到本地;
- 3)获取验证码元素节点在屏幕上的位置,即横纵坐标;
- 4)使用库读取2)中保存的截图;
- 5)利用3)获取的元素节点位置,对4)中读取的截图,再次进行局部截图,只截取元素节点位置对应部分。
2.1、导入所需库和打开目标网站
- 目标网站:知网注册页面
- 代码解析
1):该代码可以将浏览器全屏显示,其目的是为了方便后面截图,如不全屏会影响后面元素节点的截取;
2):该代码可使程序暂停2秒执行,其目的是给网页加载预留足够的时间,以保证截图时,网页已加载完成。
2.2、网页截图保存
- 代码解析
:此代码可以对创建的谷歌浏览器进行截图,并保存到本地,图片名称为:“screenshot.png”。因为我用的Spyder编辑器,当保存截图不指定路径时,系统会自动将图片保存到代码文件路径。如指定路径,则会保存到对应文件夹下,如:将修改为,则截图就会保存到D盘的“宏蜘蛛”文件夹下。
2.3、获取验证码元素位置
- 代码解析
1)
通过Xpath方法获取验证码节点元素,针对元素的获取方法,大家可参考我此前发布的文章:网络爬虫笔记—Selenium—3、查找节点。
2)
a)位置示意

会返回一个字典格式的数据,字典的key是x和y。对x和y的理解,大家可结合下图,进行理解。
以截图的左下角作为原点(0,0),截图最下方的边缘作为X轴,截图最左边的边缘作为Y轴。下图中的A点对应的位置坐标就是验证码元素方法返回的x和y的值。可以看出方法返回的是元素左下角点所对应的位置(图中的A点)。

b)为何后面要乘1.5
方法返回的坐标点位置,是基于电脑显示器无缩放的情况的坐标,但我的电脑是以150%缩放显示的,所以后面要乘以1.5,从而将坐标位置调整为我的电脑显示的位置,要不然后面截图的时候,会截取不到验证码图片。

3)
会返回元素节点的宽和高,是一个字典格式,两个key分别为width和height。其目的为了后面截取验证码图片使用。

2.4、读取截图、截取验证码图片和保存验证码图片
- 代码解析
1):该代码可以读取截取的图片,”screenshot.png”为图片名,如果代码文件和图片不在同一个文件夹下,需要在图片名称前加上图片路径。
2):该代码可以根据指定位置,对图片进行截图。括号中的参数,就是我们在“2.3、获取验证码元素位置”获取的验证码在图片中的位置。
3):该代码可以保存图片到本地,这里是保存获取的验证码图片。同时也可以指定存储位置,默认保存在代码文件夹下。
以上就是验证码获取的方法,获取验证码之后会涉及到验证码识别,针对验证码识别的问题,大家可参考我之前写的这篇文章:网络爬虫笔记—图形验证码识别。
- 本篇笔记首先在微信公众号“宏蜘蛛”上发布,链接为:网络爬虫笔记—图形验证码获取
参考资料
1、python实现获取登录验证码图片 - Tester_Jhm
2、问题解决:selenium中定位元素后使用location获取坐标值出现偏差_我敲的贼快的博客-元素的location获取的不对

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/190222.html