Python+Selenium结合使用可以帮助我们在自动化测试、爬虫等场景中解决图片验证码登录或注册问题。下面是Python+Selenium解决图片验证码登录或注册的完整攻略:
准备工作
在使用Python+Selenium结合使用之前,我们需要安装好以下工具:
- Python3:可以从Python官网下载安装包并安装。
- Selenium WebDriver:可以从Selenium官网下载适合自己浏览器的WebDriver,并按照教程配置好环境变量。
- Chrome或Firefox浏览器:Selenium默认支持这两种浏览器,所以我们需要安装其中的一种。
实现步骤
- 导入Python和Selenium依赖库
from selenium import webdriver
import time
- 打开浏览器并访问目标网站
driver = webdriver.Chrome() # 打开Chrome浏览器
driver.get("http://www.example.com/login") # 访问登录页面
- 元素定位与截图
我们需要找到验证码图片的位置,并通过Selenium截图工具将其保存为本地图片。对于验证码图片而言,相对定位是比较常见的方式,需要借助开发者工具或浏览器插件等工具进行定位。
code_img = driver.find_element_by_id("code_img")
left = code_img.location['x'] # 相对于页面左上角的X轴坐标
top = code_img.location['y'] # 相对于页面左上角的Y轴坐标
right = left + code_img.size['width'] # 右边界
bottom = top + code_img.size['height'] # 下边界
screenshot_path = "./screenshot/code.png"
driver.save_screenshot(screenshot_path) # 截图并保存到本地
img = Image.open(screenshot_path).crop((left, top, right, bottom)) # 使用PIL库裁剪图片
img_path = "./screenshot/code_cut.png"
img.save(img_path) # 保存图片
- 使用Python的第三方验证码识别库进行验证码识别
Python中有多个第三方验证码识别库可供选择。这里以pytesseract为例,示例代码如下:
import pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # 需要指定tesseract的安装路径
text = pytesseract.image_to_string(Image.open(img_path))
print("验证码为:", text)
- 输入验证码并提交表单
driver.find_element_by_id("username").send_keys("username")
driver.find_element_by_id("password").send_keys("password")
driver.find_element_by_id("code").send_keys(text)
driver.find_element_by_id("submit").click()
- 关闭浏览器
driver.quit()
示例说明
示例一:豆瓣登录
本示例以豆瓣登录为例,演示如何使用Python+Selenium解决图片验证码登录问题。
from selenium import webdriver
import time
from PIL import Image
import pytesseract
# 打开浏览器并访问登录页面
driver = webdriver.Chrome()
driver.get("https://accounts.douban.com/passport/login")
# 找到验证码图片并进行截图
code_img = driver.find_element_by_xpath("//img[@id='captcha_image']")
left = code_img.location['x']
top = code_img.location['y']
right = left + code_img.size['width']
bottom = top + code_img.size['height']
screenshot_path = "./screenshot/code.png"
driver.save_screenshot(screenshot_path)
img = Image.open(screenshot_path).crop((left, top, right, bottom))
img_path = "./screenshot/code_cut.png"
img.save(img_path)
# 识别验证码
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
text = pytesseract.image_to_string(Image.open(img_path))
print("验证码为:", text)
# 输入用户名、密码和验证码,点击登录按钮
driver.find_element_by_id("username").send_keys("username")
driver.find_element_by_id("password").send_keys("password")
driver.find_element_by_id('captcha_field').send_keys(text)
driver.find_element_by_xpath("//input[@class='btn btn-account btn-active']").click()
# 输出登录结果
time.sleep(1)
print(driver.current_url)
print(driver.title)
# 关闭浏览器
driver.quit()
示例二:CSDN注册
本示例以CSDN注册为例,演示如何使用Python+Selenium解决图片验证码注册问题。
from selenium import webdriver
import time
from PIL import Image
import pytesseract
# 打开浏览器并访问注册页面
driver = webdriver.Chrome()
driver.get("https://passport.csdn.net/register")
# 找到验证码图片并进行截图
code_img = driver.find_element_by_xpath("//img[@id='capImg_phone']")
left = code_img.location['x']
top = code_img.location['y']
right = left + code_img.size['width']
bottom = top + code_img.size['height']
screenshot_path = "./screenshot/code.png"
driver.save_screenshot(screenshot_path)
img = Image.open(screenshot_path).crop((left, top, right, bottom))
img_path = "./screenshot/code_cut.png"
img.save(img_path)
# 识别验证码
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
text = pytesseract.image_to_string(Image.open(img_path))
print("验证码为:", text)
# 输入手机号、密码、姓名和验证码,点击注册按钮
driver.find_element_by_id("phone").send_keys("13812345678")
driver.find_element_by_id("pwd").send_keys("password")
driver.find_element_by_name("repassword").send_keys("password")
driver.find_element_by_name("realname").send_keys("张三")
driver.find_element_by_id("capcha").send_keys(text)
driver.find_element_by_class_name("logging").click()
# 关闭浏览器
driver.quit()
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python +Selenium解决图片验证码登录或注册问题(推荐) - Python技术站