【爬虫】python+selenium+tesseract

2019-07-12 15:14:31 浏览数 (1)

简介

最近工作中的爬虫小知识,主要是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、大数据感兴趣请长按二维码关注一波,我会努力带给你们价值。觉得对你哪怕有一丁点帮助的请帮忙点个赞或者转发哦。关注公众号【爱编码】,小编会一直更新文章的哦。

0 人点赞