简介
最近工作中的爬虫小知识,主要是python selenium自动化截图以及tesseract的验证码自动校验(其实tesseract的正确率很差)。
前期准备
1.安装python环境,自己百度吧。
2.安装selenium,可用命令安装:pip install selenium
3.安装pytesseract,同样:pip install pytesseract
4.安装chromedriver.exe, 安装教程:https://blog.csdn.net/wwwq2386466490/article/details/81513888
5.安装tesseract.exe 教程:https://www.cnblogs.com/VseYoung/p/code.html 配置pytesseract:https://blog.csdn.net/u010134642/article/details/78747630
好多。。。接下来就是操作了。
python selenium 基本操作
下面的代码步骤
python selenium 启动浏览器, 然后输入网址百度地图的https://map.baidu.com/ ,并将浏览器最大化 接着就是在搜索框中输入关键词”广州塔”,点击搜索按钮, 最后截图保存到相应路径。(这时候,我想起了“贪玩蓝月”。。。)
代码语言:javascript复制# -*- coding:utf-8 -*-from selenium import webdriverfrom time import sleepimport time ### 这是你上一步的chromedriver.exe的地址chrome_driver = 'C:/Users/zero/AppData/Local/Google/Chrome/Application/chromedriver.exe'# 时间格式进行格式化def time_format(): current_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) return current_time
driver = webdriver.Chrome(executable_path=chrome_driver)driver.get('https://map.baidu.com/')driver.maximize_window()elem = driver.find_element_by_id("sole-input") ### 找到相应输入框的idelem.send_keys("广州塔")elem = driver.find_element_by_id("search-button") ### 找到相应按钮的idelem.click()sleep(3)### 截全屏driver.get_screenshot_as_file("E:/crawl/" time_format() ".png")sleep(2)driver.quit()
python tesseract 操作
这个tesseract 验证码识别比较不准,不过既然用过了,那就介绍一下呗。
整体流程:
1.请求百度的找回密码接口页面 2.找到验证码对应的img节点,并截图验证码 3.tesseract 进行灰度二值化等一系列图片处理,返回识别出来的验证码 4.webdriver找到相应的页面元素,输入框填写相应信息,然后点击按钮。
代码语言:javascript复制# coding:utf-8from selenium import webdriverfrom time import sleepimport unittestfrom PIL import Imagefrom PIL import ImageEnhanceimport pytesseract
chrome_driver = 'C:/Users/zero/AppData/Local/Google/Chrome/Application/chromedriver.exe'
driver = webdriver.Chrome(executable_path=chrome_driver)url="https://passport.baidu.com/?getpassindex"
driver.get(url)driver.maximize_window()driver.save_screenshot(r"E:crawlaa.png") #截取当前网页,该网页有我们需要的验证码imgelement = driver.find_element_by_xpath(".//*[@id='forgotsel']/div/div[3]/img")#imgelement = driver.find_element_by_id("code") #定位验证码location = imgelement.location #获取验证码x,y轴坐标size=imgelement.size #获取验证码的长宽coderange=(int(location['x']),int(location['y']),int(location['x'] size['width']), int(location['y'] size['height'])) #写成我们需要截取的位置坐标i=Image.open(r"E:crawlaa.png") #打开截图frame4=i.crop(coderange) #使用Image的crop函数,从截图中再次截取我们需要的区域frame4.save(r"E:crawlframe4.png")i2=Image.open(r"E:crawlframe4.png")imgry = i2.convert('L') #图像加强,二值化,PIL中有九种不同模式。分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。L为灰度图像sharpness =ImageEnhance.Contrast(imgry)#对比度增强i3 = sharpness.enhance(3.0) #3.0为图像的饱和度i3.save("E:crawlimage_code.png")i4=Image.open("E:crawlimage_code.png")text=pytesseract.image_to_string(i2).strip() #使用image_to_string识别验证码
print(text)elem = driver.find_element_by_id("account")elem.send_keys(13652878889)elem = driver.find_element_by_id("veritycode")elem.send_keys(text)sleep(2)elem = driver.find_element_by_id("submit")elem.click()
总结
1.人生苦短,我用python。
2.其实python chrome的手机端同样可以解放双手。
3.平时页面代码写完有很多输入框的那种,你可以实现填完一次,以后就不用再填了,或许这就是自动化测试。。。
4.喜欢打游戏的,刷怪什么,可以了解一下哦。
最后
如果对 Java、大数据感兴趣请长按二维码关注一波,我会努力带给你们价值。觉得对你哪怕有一丁点帮助的请帮忙点个赞或者转发哦。关注公众号【爱编码】,小编会一直更新文章的哦。