Python利用selenium识别简单验证码(学习笔记)

#思路:首先截取带有验证码的整个页面,保存为图片,此时可通过浏览器的截屏操作直接获取,然后根据验证码标签所在位置截取验证码所在标签,保存为图片。因是在截取图片上进行裁剪,此时采用PIL中的Image库并在验证码图片坐标基础上进行截屏,最终通过tesserocr库,将获取的验证码图片输出为字母、数字等。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait   #显式等待
from selenium.webdriver.support import expected_conditions as EC #显式等待时选定出现元素
from selenium.webdriver.common.by import By   #显示等待时通过By选择元素选择器
from bs4 import BeautifulSoup
from PIL import Image    #利用Image中的截屏操作,从浏览器截图上截取验证码所在的标签
import tesserocr   #用来将图片验证码图片转化为字符

browser = webdriver.Firefox()
browser.get('https://www.landchina.com/default.aspx?tabid=263 ')

# 验证码验证
browser.save_screenshot('screen.png')    #通过浏览器将验证码页面进行截屏并保存
img = browser.find_element_by_class_name('verifyimg')  #选定验证码所在标签
location = img.location                           #确定验证码标签所在位置
size = img.size                                   #标签大小
left = location['x']                            #确定验证码标签的上下左右坐标
top = location['y']
right = left + size['width']
bottom = top + size['height']
picture = Image.open('screen.png')
image_obj = picture.crop((left, top, right, bottom)) #通过坐标参数,从截屏页面截取验证码标签
image_obj.save('pic.png')          #保存验证码所在标签为图片
image = Image.open('pic.png')
result = tesserocr.image_to_text(image)  #利用tesserocr将图片转化为文字
input = browser.find_element_by_id('intext')  #定位验证码内容填入位置
input.send_keys(result)                      #填入验证码内容
browser.execute_script('YunsuoAutoJump();')   #通过执行script进行提交,也可以使用定位提交按钮点击提交

你可能感兴趣的:(python,selenium,定位)