Python +Selenium解决图片验证码登录或注册问题(推荐)

Python+Selenium结合使用可以帮助我们在自动化测试、爬虫等场景中解决图片验证码登录或注册问题。下面是Python+Selenium解决图片验证码登录或注册的完整攻略:

准备工作

在使用Python+Selenium结合使用之前,我们需要安装好以下工具:

  1. Python3:可以从Python官网下载安装包并安装。
  2. Selenium WebDriver:可以从Selenium官网下载适合自己浏览器的WebDriver,并按照教程配置好环境变量。
  3. Chrome或Firefox浏览器:Selenium默认支持这两种浏览器,所以我们需要安装其中的一种。

实现步骤

  1. 导入Python和Selenium依赖库
from selenium import webdriver
import time
  1. 打开浏览器并访问目标网站
driver = webdriver.Chrome() # 打开Chrome浏览器
driver.get("http://www.example.com/login") # 访问登录页面
  1. 元素定位与截图

我们需要找到验证码图片的位置,并通过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) # 保存图片
  1. 使用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)
  1. 输入验证码并提交表单
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()
  1. 关闭浏览器
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技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • pycharm软件实现设置自动保存操作

    PyCharm是一款用于Python开发的IDE(Integrated Development Environment),提供丰富的功能和工具。它的自动保存功能可以帮助我们在忘记保存时避免丢失代码。以下是实现PyCharm自动保存的攻略: 步骤1:在PyCharm中打开设置面板 首先,在PyCharm的菜单栏中依次选择“File”->“Settings…

    python 2023年5月19日
    00
  • python 弹窗提示警告框MessageBox的实例

    当我们在Python程序中需要进行一些交互时,弹窗提示框往往是一个很不错的选择。Python拥有多种弹窗提示框的方式,其中最常用的是MessageBox。MessageBox可以让我们弹出警告框或消息框等不同类型的对话框。接下来,我将详细讲解如何使用Python实现弹窗提示框MessageBox的操作。 1. 安装Python tkinter模块 由于Mes…

    python 2023年6月13日
    00
  • Python文件基本操作实用指南

    以下是详细讲解“Python文件基本操作实用指南”的完整攻略,包含两个示例说明。 1. 打开文件 在Python中,我们可以使用open()函数来打开一个文件。open()函数的语法如下: open(file, mode=”, buffering=-1, encoding=None, errors=None, newline=None, closefd=T…

    python 2023年5月14日
    00
  • 对python读取CT医学图像的实例详解

    对Python读取CT医学图像的实例详解 什么是CT医学图像? CT医学图像是医学上一种使用X射线技术得到的体内断层影像,是临床医生常用的一种影像诊断方式。CT医学图像可以显示人体内部的组织结构和器官分布,有助于临床医生做出更加准确和迅速的诊断。 读取CT医学图像的Python实现 Python可以通过DICOM(数字影像与通信医学)库进行读取CT医学图像。…

    python 2023年5月18日
    00
  • python中列表添加元素的几种方式(+、append()、extend())

    以下是“Python中列表添加元素的几种方式(+、append()、extend())”的完整攻略。 1. 列表添加元素的几种方式 在Python中,可以使用多种方式向列表添加元素。下面介绍三种常用的方式:使用+运符、使用append()方法和使用extend()方法。 1.1 使用运算符 使用运算符可以将两个列表合并成一个新的列表。示例如下: list1 …

    python 2023年5月13日
    00
  • python爬虫之爬取笔趣阁小说

    下面是详细的攻略: python爬虫之爬取笔趣阁小说 1. 确定目标 首先需要确定我们要爬取的笔趣阁小说的目标页面。以《盗墓笔记》为例,我们可以选择访问其页面:http://www.biquge.info/10_10945/ 2. 分析页面 我们需要通过浏览器的开发者工具对页面进行分析,找到小说的章节列表。可以看到章节列表位于id为list的div元素内部,…

    python 2023年5月14日
    00
  • Python 用repeat()重复单个值

    当我们需要在 Python 中多次使用同一个值时,重复单个值是一种非常有用的方法。Python 中的 repeat() 函数可以很方便地实现这一点。 repeat() 函数的使用方法 repeat() 函数位于 itertools 模块中,使用时需要先引入该模块。它的基本使用方法为: itertools.repeat(object, times) 其中,ob…

    python-answer 2023年3月25日
    00
  • 超全Python图像处理讲解(多模块实现)

    超全Python图像处理讲解(多模块实现) 前言 图像处理在现代计算机科学中有着极其广泛的应用,例如图像识别、人脸识别、自动化驾驶等领域。Python作为一种高效且易于学习的编程语言,自然成为了图像处理领域中不可或缺的一员。 本文将介绍Python图像处理的入门知识以及多个图像处理库的使用方式,其中包括但不限于:Pillow、OpenCV、matplotli…

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部