selenium模块:截图获取12306的验证码作为图片发生偏移,解决方案

selenium模块学习自动化爬虫时,遇到一个很头痛的问题,题主用了一下午才彻底搞定,真菜警告
追随B站up主爬虫视频其中项目https://www.bilibili.com/video/BV1Yh411o7Sz?t=1533&p=56:
1.解决12306模拟登陆,我在截图整张浏览器页面
在这里插入图片描述
2.再裁剪图片,聚焦获取12306的验证码,即目标为:
在这里插入图片描述
但是,我按照up主一步一步,发现聚焦剪裁目标图片时,发现得到的根本不是我要的结果,得到了如下结果:

偏移1
甚至是!!!
在这里插入图片描述
都发生了一定的位置偏移和缩放,但是我的代码和up主基本没有什么出入,于是在一个博文的引导下,找到了解决办法:点击这里
于是我就解决了,阿西吧,我采用的是将显示页面改成较小100%(win8.1)
不要问我为什么用win8.1,因为装系统不难,装各种软件以及配置很头痛
在这里插入图片描述
之后,要确认注销,记得先保存你的文件先。然后重新运行代码
注意,因为自动化操作谷歌浏览器,有个小问题,和up主还是不同,验证码图片位置有所不同,在最浏览器最右侧,会看不到,不放大的话,还是不理想。可能是我的浏览器初始化没设置好??
所以,一开始需要先放大整个浏览器页面,填充整个页面。
bro.maximize_window()

from time import sleep
from lxml import etree
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver import ChromeOptions
from PIL import Image
# 如何实现不被检测出来selenium
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])url = 'https://kyfw.12306.cn/otn/resources/login.html'
bro = webdriver.Chrome(options=option)
#放大整个浏览器页面
bro.maximize_window() 
sleep(2)
print(bro.get_window_size())
bro.get(url=url)
sleep(3)btn = bro.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')
print('btn',btn.location)
btn.click()
sleep(2)
# bro.execute_script('window.scrollTo(document.body.scrollWidth,0)')
# user_input = bro.find_element_by_id('J-userName').send_keys('*********')
# sleep(1.59)
# password_input = bro.find_element_by_id('J-password').send_keys('*******')
# sleep(1.59)
# 动态图片获取
# 对整张页面截图,定位目标局部区域
bro.save_screenshot('./aa.png')code_img_ele = bro.find_element_by_xpath('//*[@id="J-loginImg"]')
location = code_img_ele.location#左上角的x,y坐标,字典类型
print('location',location)
size = code_img_ele.size #验证码的长宽,字典类型
print('size',size)
rangle = (int(location['x']) , int(location['y']) , int(location['x']+size['width']) , int(location['y']+size['height']))# 剪图片
i = Image.open('./aa.png') 
code_img_name = './cut.png'
frame = i.crop(rangle)
frame.save(code_img_name)

至于其他方法,留给大家自己去试吧,或许可以?我试过了但是不得行。可能是我太菜了。
在这里插入图片描述
晚安,玛卡巴卡
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部