Selenium 初步使用之自动登录(包含识别验证码),超级详细

这篇具有很好参考价值的文章主要介绍了Selenium 初步使用之自动登录(包含识别验证码),超级详细。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

初次开始使用Selenium,于是开始用登录作为联手项目,是一个真实的登录界面,包含验证码(验证码是难点,获取与识别),以下会讲的很详细,我怕我下次又忘记了
我采用Selenium + python + 百度云OCR,安装等教程自行百度,我就不多说了

二、selenium打开浏览器获取相应el

from selenium import webdriver
from selenium.webdriver.common.by import By
import base64
#注册Chrome驱动,打开浏览器网址
driver = webdriver.Chrome()
url = "************"
driver.get(url)
#获取相应el
driver.find_element(By.NAME,"***").send_keys('***')
driver.find_element(By.NAME, "***").send_keys('***')
#获取图片
png = driver.find_element(By.CSS_SELECTOR,"****")
img_url = png.get_attribute("src")  # 获得图片的url,本次测试的是bs64生成,采用解码获得图片
head, context = img_url.split(",")  # 截取后字段的bas64编码
img_data = base64.b64decode(context)
image = Image.open(BytesIO(img_data));
image.save("capt.png")

这段代码主要是利用selenium打开网站,获取到相应的dom,find_element_by_id等写法已经统一换为find_element(By.ID, “***”)等了,先将图片保存下来考研方便后续的识别

三、验证码预处理

验证码一般无法直接识别,我们需要通过灰度、二值、降噪等手段,使得图片更加清晰,提高图片的识别准确率
下列代码需要提前引入以下包

from PIL import Image

1.灰度化

img = img.convert('L')  # P模式转换为L模式(灰度模式默认阈值127)

2.二值化

count = 230  # 设定阈值,阈值的大小由图片的清晰度等自行调节
table = []
for i in range(256):
    if i < count:
        table.append(0)
    else:
        table.append(1)
img = img.point(table, '1')
img.save('captcha.png')

3.降噪

pixdata = img.load()
w,h = img.size
for y in range(1,h-1):
   for x in range(1,w-1):
        count = 0
        if pixdata[x,y-1] > 245:
            count = count + 1
        if pixdata[x,y+1] > 245:
            count = count + 1
        if pixdata[x-1,y] > 245:
            count = count + 1
        if pixdata[x+1,y] > 245:
            count = count + 1
        if count > 2:
            pixdata[x,y] = 255
return img

四、百度云识别

需要提前注册文章来源地址https://www.toymoban.com/news/detail-788427.html

from aip import AipOcr
# 识别码
APP_ID = '****'
API_KEY = '****'
SECRET_KEY = '****'
# 初始化对象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 读取图片
def get_file_content(file_path):
    with open(file_path, 'rb') as f:
        return f.read()

image = get_file_content('end.png') # 传入图片
# 定义参数变量
options = {'language_type': 'ENG', }  # 识别语言类型,默认为'CHN_ENG'中英文混合
#  调用通用文字识别
result = client.basicGeneral(image, options)  # 高精度接口 basicAccurate
for word in result['words_result']:
    captcha = (word['words'])

print('识别结果:' + captcha)
return captcha

五、完整代码

import base64
from io import BytesIO
from selenium import webdriver
from selenium.webdriver.common.by import By
from PIL import Image
from time import sleep
from aip import AipOcr

# 对二值化的图像进行降噪处理,使得识别更加准确
def depoint(img):
    pixdata = img.load()
    w,h = img.size
    for y in range(1,h-1):
        for x in range(1,w-1):
            count = 0
            if pixdata[x,y-1] > 245:
                count = count + 1
            if pixdata[x,y+1] > 245:
                count = count + 1
            if pixdata[x-1,y] > 245:
                count = count + 1
            if pixdata[x+1,y] > 245:
                count = count + 1
            if count > 2:
                pixdata[x,y] = 255
    return img

# 获得验证码,并进行处理,二值化
def deal_image():
    png = driver.find_element(By.CSS_SELECTOR,".*******")
    img_url = png.get_attribute("src")  # 获得图片的url,本次测试的是bs64生成,采用解码获得图片
    head, context = img_url.split(",")  # 截取后字段的bas64编码
    img_data = base64.b64decode(context)
    image = Image.open(BytesIO(img_data));
    image.save("capt.png")

    img = Image.open('capt.png')
    img = img.convert('L')  # P模式转换为L模式(灰度模式默认阈值127)
    count = 230  # 设定阈值,阈值的大小由图片的清晰度等自行调节
    table = []
    for i in range(256):
        if i < count:
            table.append(0)
        else:
            table.append(1)

    # print(table)

    img = img.point(table, '1')
    img.save('captcha.png')

# 调用百度云OCR API 进行识别
def discern_captcha():
    # 识别码
    APP_ID = '****'
    API_KEY = '****'
    SECRET_KEY = '****'
    # 初始化对象
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
    # 读取图片
    def get_file_content(file_path):
        with open(file_path, 'rb') as f:
            return f.read()

    image = get_file_content('end.png') # 传入图片
    # 定义参数变量
    options = {'language_type': 'ENG', }  # 识别语言类型,默认为'CHN_ENG'中英文混合
    #  调用通用文字识别
    result = client.basicGeneral(image, options)  # 高精度接口 basicAccurate
    for word in result['words_result']:
        captcha = (word['words'])

    print('识别结果:' + captcha)
    return captcha

# 登录事件,若识别不准确需点击第二次重复
def ClickRandomCode():
    deal_image()
    image = depoint(Image.open('captcha.png'))
    image.save('end.png')
    image = depoint(Image.open('end.png'))
    image.save("end.png")
    randomCode = discern_captcha()
    driver.find_element(By.NAME, "randomCode").send_keys(randomCode)
    driver.find_element(By.CSS_SELECTOR, ".card-z .el-button").click()
    sleep(2) # 错误或成功信息有延迟
    try:
        text = driver.find_element(By.CSS_SELECTOR, ".el-message__content").text
        if (text == "验证码错误"):
            driver.find_element(By.CSS_SELECTOR, ".verification-code > img").click()
            driver.find_element(By.CSS_SELECTOR, ".verification-code > img").clear()
            ClickRandomCode() # 递归调用直至正确
            print("验证码错误")
        else:
            print("登录成功")
    except:
        print("ok")

def login(***,***):
    driver.find_element(By.NAME,"****").send_keys(***)
    driver.find_element(By.NAME, "***").send_keys(***)
    ClickRandomCode()

if __name__ == '__main__':
    driver = webdriver.Chrome()
    url = "*****"
    driver.get(url)
    login("****","****")

到了这里,关于Selenium 初步使用之自动登录(包含识别验证码),超级详细的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python+selenium绕过滑块验证,实现自动登录

    实现taobao自动化登录,当用webdriver打开淘宝时,滑块验证一直失败,手动滑都会失败。因为淘宝会检测window.navigator.webdriver,控件检测到你是selenium进入,所以就会弹出滑块验证。只需要绕过检测就能实现自动登录 验证了两种方法可以跳过: 第一种是给浏览器加启动参数,开

    2024年02月12日
    浏览(33)
  • [Python自动化]selenium之验证码识别

    这一专栏,将以目的为导向,以简化或自动化完成工作任务为目标,将Python运用于实践中,解决实际问题,以激发读者对这门脚本语言的学习兴趣。在开始Python自动化相关实战的学习前,建议对 Python语言本身 以及 Python 爬虫 的相关知识展开一定的学习与了解。对此博客已开

    2023年04月08日
    浏览(39)
  • selenium--自动化识别图片验证码并输入

    首先注册百度智能云账号(这里我用的是百度智能云):    1.要在这里面保存好API Key 和 Secret Key  2.然后进入查看文档   在pycharm中: 导入自动化文件: 在写自动化脚本时调用封装的百度类: 注意:自动化识别文字可能会出现识别不出来的可能,要解决这个Bug。 代码分享:

    2024年02月11日
    浏览(38)
  • Selenium+2Captcha 自动化+验证码识别实战

    本文深入探讨了使用Selenium库进行网页自动化操作,并结合2Captcha服务实现ReCAPTCHA验证码的破解。内容涵盖Selenium的基础知识、验证码的分类、2Captcha服务的使用,以及通过实例进行的详细讲解,最后对实践进行总结和优化思考,为读者提供了一条完整的验证码破解实践路线图

    2024年02月14日
    浏览(41)
  • Java+Selenium+chrome 实现定时自动登录(含验证码解析)

    作为打工人,感觉对于定时自动登录这个功能还是需要会,现将方法分享出来,供大家参考。 说明:以chrome浏览器为例,其他浏览器可以自动查找自己浏览器的驱动,方法相同 进入chrome浏览器设置,左侧菜单最后一栏,找到关于chrome,点开获取浏览器版本号,进入 https://r

    2024年02月06日
    浏览(40)
  • 使用python库解决登录的验证码识别-图片验证码

    前言: 在UI自动化测试和爬虫测试中,验证码是个比较头疼的问题,包括:图片验证码,滑块验证码,等一些常见的验证码场景。 识别验证码的python 库有很多,用起来也并不简单,这里推荐一个简单实用的识别验证码的库 ddddocr (带带弟弟ocr)库。 今天先用一个图片验证码示

    2023年04月11日
    浏览(30)
  • 使用selenium模拟登录解决滑块验证问题

    目录 1.登录入口 2.点击“账号密码登录” 3.输入账号、密码并点击登录 4.滑块验证过程 5.小结 本次主要是使用selenium模拟登录网页端的TX新闻,本来最开始是模拟请求的,但是某一天突然发现,部分账号需要经过滑块验证才能正常登录,如果还是模拟请求,需要的参数太多了

    2024年02月16日
    浏览(28)
  • Python之selenium,使用webdriver模拟登录网站(含验证码)

    前段时间做了一个小项目,其中有一段需要自动获取网站后台的数据,但是这个网站没有任何提供给开发者的API,所以只能靠自己去探索。 起初想着用发送请求的方式去模拟登陆,获取cookies,从而再获取网站后台数据,但是因为自己太菜了一些原因,放弃了这个方法。 后来

    2024年02月02日
    浏览(32)
  • 使用第三方打码平台图鉴识别滑动验证码模拟登录

    图鉴网页地址: http://www.ttshitu.com/ 登录后充值一个提分 把这个python脚本复制保存到一个python文件中去 识别流程 首先你要先确定验证码的类型,然后选择类型对应的编号 页面分析 我们就用邮箱登录为例 我们点击登录后会有一个滑动验证码的验证,这就是我们主要的问题,下面我

    2024年02月06日
    浏览(43)
  • 使用selenium如何实现自动登录

      回顾使用requests如何实现自动登录一文中,提到好多网站在我们登录过后,在之后的某段时间内访问该网页时,不会给出请登录的提示,时间到期后就会提示请登录!这样在使用爬虫访问网页时还要登录,打乱我们的节奏,并详细介绍了使用requests爬取网页时为实现自动登

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包