首页 > 其他分享 >完美实现验证码登录

完美实现验证码登录

时间:2023-09-28 19:12:01浏览次数:27  
标签:loc code name 登录 完美 driver 验证码 login psw

# login_code.py


# 导包
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.chrome.options import Options
import pytesseract # 导入ocr库
from PIL import Image # 导入图像处理库
import ddddocr
# 定义类
class GetEle:
    def __init__(self,driver):
        self.driver=driver

    def login_name_psw(self,loc_name,loc_psw,loc_submit,login_name,login_psw):
        # 账号和密码输入
        driver.find_element(By.CSS_SELECTOR,loc_name).send_keys(login_name)
        driver.find_element(By.CSS_SELECTOR, loc_psw).send_keys(login_psw)
        driver.find_element(By.CSS_SELECTOR, loc_submit).click()



    def submit_login(self,loc):
        driver.find_element(By.CSS_SELECTOR, loc).click()

class CodePass:
    def __init__(self,driver):
        self.driver=driver
    def get_code(self,loc_code):
        # 获取全屏截图,获取坐标位置 ,截图保存
        # 第一步 ---------获取到验证码的位置,截图,获取坐标
        ele_cap = driver.find_element(By.CSS_SELECTOR, loc_code)
        # 获取元素的位置和大小
        location = ele_cap.location
        size = ele_cap.size
        print(f"获取验证码元素位置location:{location},获取验证码元素大小size:{size}")
        # 获取整个页面截图
        driver.save_screenshot("code.png")
        sleep(2)
        # 打开照片
        captcha_image = Image.open("code.png")
        # 获取验证码的上下左右坐标
        left = int(location['x'])
        top = int(location['y'])
        right = int(location['x'] + size['width'])
        bottom = int(location['y'] + size['height'])
        print(f"坐标展示 left:{left},top:{top},right:{right},bottom:{bottom}")
        # 第二步------------------利用坐标信息对截图图片做裁剪
        # 打开图片
        image = Image.open("code.png")

        # 裁剪图片
        cropped_image = image.crop((left, top, right, bottom))

        # 显示裁剪后的图片
        cropped_image.show()
        # 保存裁剪后的图片
        cropped_image.save("code.png")

        # 第三步-----------------------对截图做OCR识别

        # 实例化一个ocr
        ocr = ddddocr.DdddOcr()
        # 以二进制格式打开verf.png图片用于只读
        with open('code.png', 'rb') as f:
            # 用来读取文件
            img_bytes = f.read()
        # 识别图片中的内容
        res = ocr.classification(img_bytes)
        # 输出内容
        print('识别出的验证码为:' + res)
        return res
    def input_code(self,loc,res):
        # 找到元素,输入code,点击 登录
        driver.find_element(By.CSS_SELECTOR,loc).send_keys(res)

# 调用
if __name__ == '__main__':
    '''
    # 创建无头浏览器选项
    options = Options()
    options.add_argument("--headless")
    # 调用driver
    driver=webdriver.Chrome(options=options)
    '''
    driver = webdriver.Chrome()


    # url
    url=r"http://XXXX/forum.php"
    driver.get(url)
    # 实例化类
    web_e=GetEle(driver)

    # 调用登录
    loc_name='#ls_username'
    loc_psw='#ls_password'
    loc_submit='.pn.vm>em'
    login_name='sq123'
    login_psw='111111'
    web_e.login_name_psw(loc_name,loc_psw,loc_submit,login_name,login_psw)

    #  输入验证码
    sleep(3)
    print("进入第二阶段 输入验证码")
    c=CodePass(driver)
    code_loc = 'img[onclick*="updateseccode"]'
    res=c.get_code(code_loc)
    # 调用获取验证码
    input_code_loc = 'input[id*=seccodeverify]'

    c.input_code(input_code_loc,res)

    # 提交登录按钮
    submit_loc = '[name=loginsubmit]'
    web_e.submit_login(submit_loc)
    # 退出
    sleep(3)
    driver.quit()

 

标签:loc,code,name,登录,完美,driver,验证码,login,psw
From: https://www.cnblogs.com/haha1988/p/17736368.html

相关文章

  • 钉钉小程序 登录记住密码
    钉钉小程序登录记住密码1、在登录成功后添加缓存dd.setStorage({key:'username',data:"账号",});dd.setStorage({key:'password',data:"密码",});2、在onLoad加载......
  • postman升级后文件丢失/登录后无文件解决
     找到C盘用户admin账号下AppData文件夹,按照下面路径找到如下如所示的文件C:\Users\Admin\AppData\Roaming\Postman 找到最新的一次记录 将这个最新的json文件导入到postman中即可。 ......
  • NodeJS分别实现token、cookie登录注册鉴权(KOA2)
    源码https://github.com/NaCl-131/node-study.git包npminstallkoanpminodemon-D#保存自动更新npmikoa-router#路由npmikoa-body#解析post的传参npmimysql2sequelize#mysql和一个ORM工具npmijsonwebtoken#JWTnpmidotenv#.env文件npmikoa-sess......
  • 单点登录SSO
    单点登录SSO单点登录实现方式主要使用CAS和OAuth知识点梳理SSO-SingleSignOn,单点登录CAS-CentralAuthenticationService,中央认证服务OAuth-OpenAuthorization,它是一种开放授权协议,开放第三方登录方式SSO前的痛点一个系统多个模块,用户频繁登录,用户体验极差。......
  • 验证码2 成功了一半
    第一步导入第一个库 OCR识别图像上文字的库  pytesseract;它是Google的Tesseract-OCR引擎的Python封装导入前需要先安装   方便理解:这个词由python中的py开头;tesseract是立方体,延伸将二维变成立方体"tesseract"方便记忆:将单词分解为音节,例如"tes-ser-act"。 ......
  • 验证码
      基础代码 #导包fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasEC#定义driverdriver=webdriver.Chrom......
  • 用html写用户注册与登录
    <!DOCTYPEhtml><html><head><title>RegistrationSystem</title><style>body{font-family:Arial,sans-serif;margin:0;padding:20px;}h1{text......
  • xStream完美转换XML、JSON
    xStream框架xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换;前面有介绍过json-lib这个框架以及Jackson这个框架它们都完美支持JSON,但是对xml的支持还不是很好。一定程度上限制了对Java对象的描述,不能让xml完全体现到对Java......
  • Python桌面可视化+自动登录学校教务系统(含源码!!!)
    前言:通过Python爬虫与tkinter模块实现桌面快捷自动化登录教务系统效果展示:整体思路:创建主界面,在界面中手动输入用户名和密码,点击登录后自动打开浏览器,截取整个页面,裁剪出登录页面中的图片验证码并保存到本地,对验证码图片进行处理,识别出验证码。将用户名,密码,验证码一同自动输入到对......
  • ssh添加白名单限制登录
    集团分公司内网环境下的zabbix主机需要远程管理,那么就需要将ssh22端口从公司出口路由器中映射出来,如果不加以登录限制,那么被黑的几率就很高了,现将具体方法记录如下:编辑/etc/hosts.allow文件,将允许远程登录的主机ip添加到该文件中:sshd:50.30.150.158:allowsshd:50.194.2.1......