精华内容
下载资源
问答
  • 本篇文章主要介绍了Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录,具有一定的参考价值,有兴趣的可以了解下
  • [Python自动化]selenium验证码识别

    千次阅读 热门讨论 2021-08-25 15:32:24
    文章主要介绍了selenium自动化环境下,验证码识别系列问题。

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


    往期内容提要:


    “验证码的识别”无论是在网络爬虫,还是自动化领域,都是无法绕开的话题。此前作者曾在 [Python爬虫] 九、机器视觉与机器图像识别之Tesseract 一文中,对验证码的识别进行过初步介绍。在 教务管理系统:成绩、课表查询接口设计及抢课、监控功能实现 一文中,对图形验证码的识别进行了实战展示。在这一篇文章中,将对验证码的识别作出一个相对系统的概括与总结。

    一般而言,在自动化工作中,如遇到验证码问题,我们一般通过三个方式解决。其一,手动解决;其二, 打码平台解决;三,代码解决。

    针对第一种方法,如在入门篇【Python自动化】 selenium之网课学习自动化 一文中,在登录环节,为节省学习成本,我们便是采用的手动输入的方式处理验证码,通过图像识别。

    在这里插入图片描述

    def Login():
            print('***************正在加载必要元素,请耐心等待***************')
            browser.get('https://www.******.cn/home/')
            browser.find_element_by_xpath('//*[@id="accountFrom"]/label[1]/input').send_keys(username)
            browser.find_element_by_xpath('//*[@id="accountFrom"]/label[3]/input').send_keys(pwd)
            input("请输入验证码登陆后回车确认:")
    

    针对第二种方法,正所谓利用“钞能力”解决问题,仅需足够预算,简单高效。在这里便不再多述。本文将主要讲述如何通过代码,实现验证码的识别。鉴于当前验证码形式的多样性,这里选用字符识别和滑动拼图两种最常见的验证方式,展开介绍。


    验证码识别基本步骤梳理:
    1. 定位识别元素
    2. 获取识别(完整)图片
    3. 编写识别方法
    4. 通过识别验证

    一、字符验证码识别

    在这里插入图片描述

    1. 获取并保存验证码:

    这一步的基本逻辑是:访问网页,保存验证码。但值得注意的是,每次页面刷新后验证码的值也将改变,因此请求验证码时候的cookie值应当与访问网页时的cookie值保持一致。

    (1)访问网页
    url1 = '手动打码/Login.aspx'
    def get_cookie():
            headers1 = {
                "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0",
                "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
                "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
                "Accept-Encoding": "gzip, deflate",
                "Content-Type": "application/x-www-form-urlencoded",
                "Origin": "手动打码",
                "Connection": "keep-alive",
                "Referer": "手动打码",
                "Upgrade-Insecure-Requests": "1"
            }
            main = session.get(url1, headers=headers1)
            gb_headers = main.headers
            return gb_headers
    
    (2)储存验证码
    test = get_cookie()
    url2 = '手动打码/Image.aspx'
    def get_pic():
        # 验证码请求头
        headers2 = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0",
            "cookie": "varPartNewsManage.aspx=10" + test["Set-Cookie"]
        }
    
        re_pic = requests.get(url2, headers=headers2)
        response = re_pic.content
    
        file = "C:\\Users\\john\\Desktop\\1\\" + ".png"
        playFile = open(file, 'wb')
        playFile.write(response)
        playFile.close()
    
    1. 识别验证码:
    def recognize_captcha(img_path):
        im = Image.open(img_path)
        num = pytesseract.image_to_string(im)
        return num
    
    get_pic()
    pic_res = recognize_captcha("C:\\Users\\john\\Desktop\\1\\" + ".png")
    #print(pic_res)  # 验证码识别结果
    
    1. 登陆
    def post_login():
        headers3 = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
            "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
            "Accept-Encoding": "gzip, deflate",
            "Content-Type": "application/x-www-form-urlencoded",
            "Origin": "手动打码",
            "Connection": "keep-alive",
            "Referer": "手动打码",
            "Upgrade-Insecure-Requests": "1",
            "cookie": "varPartNewsManage.aspx=10;" + test["Set-Cookie"]
        }
        data = { "Flag": "Login",
                "username": "手动打码",
                "password": "手动打码",
                "ddlUserClass": "1",
                "code1": pic_res,
                "ImageButton2.x": "64",
                "ImageButton2.y": "10"}
        res = session.post(url=url,data=data,headers=headers3)
        #print(res.request.headers)  #核验cookie是否有效带上
        #print(res.text)
    
    post_login()
    

    二、滑动拼图验证码识别

    在这里插入图片描述

    1. 获取验证按钮与验证码的位置
    def get_geetest_button(self):
        """
        获取初始验证按钮
        :return:
        """
        # 验证按钮
        button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'geetest_radar_tip')))
        return button
    
    def get_position(self):
        """
        获取验证码位置
        :return: 验证码位置元组
        """
        img = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_canvas_img')))
        print('img')
        location = img.location
        size = img.size
        top, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size['width']
    

    进入验证页面,获取验证按钮与验证码的位置

    1. 获取完整图片
      在这里插入图片描述
      在这里插入图片描述
    def get_screenshot(self):
        """
        获取网页截图
        :return: 截图对象
        """
        screenshot = self.browser.get_screenshot_as_png()
        screenshot = Image.open(BytesIO(screenshot))
        return screenshot
    def get_geetest_image(self, name='captcha.png'):
        """
        获取验证码图片
        :return: 图片对象
        """
        top, bottom, left, right = self.get_position()
        print('验证码位置', top, bottom, left, right)
        screenshot = self.get_screenshot()
        captcha = screenshot.crop((left, top, right, bottom))
        captcha.save(name)
        return captcha
    def delete_style(self):
        '''
        执行js脚本,获取无滑块图
        :return None
        '''
        js = 'document.querySelectorAll("canvas")[2].style=""'
        self.browser.execute_script(js)
    def get_gap(self, image1, image2):
        """
        获取缺口偏移量
        :param image1: 带缺口图片
        :param image2: 不带缺口图片
        :return:
        """
        left = 60
        print(image1.size[0])
        print(image1.size[1])
        for i in range(left, image1.size[0]):
            for j in range(image1.size[1]):
                if not self.is_pixel_equal(image1, image2, i, j):
                    left = i
                    return left
        return left
    
    def is_pixel_equal(self, image1, image2, x, y):
        """
        判断两个像素是否相同
        :param image1: 图片1
        :param image2: 图片2
        :param x: 位置x
        :param y: 位置y
        :return: 像素是否相同
        """
        # 取两个图片的像素点
        pixel1 = image1.load()[x, y]
        pixel2 = image2.load()[x, y]
        threshold = 60
        if abs(pixel1[0] - pixel2[0]) < threshold and abs(pixel1[1] - pixel2[1]) < threshold and abs(
                pixel1[2] - pixel2[2]) < threshold:
            return True
        else:
            return False
    

    通过调整css样式,获取完整图片。同时获取带缺口的图片加入带缺口图片进行对比,获取偏移量!(PIL)

    1. 验证

    根据偏移量获取移动轨迹,控制滑块,填补缺口!

    def get_track(self, distance):
        """
        根据偏移量获取移动轨迹
        :param distance: 偏移量
        :return: 移动轨迹
        """
        # 移动轨迹
        track = []
        # 当前位移
        current = 0
        # 减速阈值
        mid = distance * 4 / 5
        # 计算间隔
        t = 0.2
        # 初速度
        v = 0
        while current < distance:
            if current < mid:
                # 加速度为正2
                a = 2
            else:
                # 加速度为负3
                a = -1
            # 初速度v0
            v0 = v
            # 当前速度v = v0 + at
            v = v0 + a * t
            # 移动距离x = v0t + 1/2 * a * t^2
            move = v0 * t + 1 / 2 * a * t * t
            # 当前位移
            current += move
            # 加入轨迹
            track.append(round(move))
        return track
    
    def move_to_gap(self, slider, track):
        """
        拖动滑块到缺口处
        :param slider: 滑块
        :param track: 轨迹
        :return:
        """
        ActionChains(self.browser).click_and_hold(slider).perform()
        for x in track:
            ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform()
        time.sleep(0.5)
        ActionChains(self.browser).release().perform()
    

    这里值得注意的是,由于验证码的特殊性,我们是不能控制滑块匀速滑过去的(人类是做不到的),极验在此也是做了验证的!所以我们按照人操作,先加速后减速做个优化!

    此外,不管是电脑设置还是浏览器设置的缩放都要改成100%。否则将会影响图片的截取与偏移量的错误计算。


    至此,本文也就进入尾声了。本文的撰写来自于开发中的一点心得体会,主要目的在于通过实践提高读者Python学习兴趣,解决实际问题。供对这一领域感兴趣的读者以参考借鉴。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。


    如果您有任何疑问或者好的建议,期待你的留言、评论与关注!

    展开全文
  • 利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路)一、超级鹰注册:超级鹰入口1、首先注册一个超级鹰账号,然后在超级鹰免费测试...二、使用selenium库来识别点触式验证码:1、首先是...

    利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路)

    一、超级鹰注册:超级鹰入口

    1、首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分,基本上就够学习使用了。如果想一直用可以用,可以充值,不是很贵。

    2、下载超级鹰的python库代码。代码

    3、然后有测试案例,自己可以试着跑一跑代码。

    二、使用selenium库来识别点触式验证码:

    1、首先是找一个使用点触式二维码的网站:(这个真的是比较难找了,由于静谧大大书上的网站被封了,我找了好久,才找到斗鱼的找回密码是用的点触式验证码,将就着用吧)。

    2、开始操作:

    (1)首先声明一个类,定义属性:

    1 ‘‘‘

    2 func:斗鱼找回密码,点触式二维码3 author:monty4 date:2018/11/245 ‘‘‘

    6 from chaojiying importChaojiying_Client7 from selenium importwebdriver8 from selenium.webdriver.support.wait importWebDriverWait9 from selenium.webdriver.support importexpected_conditions as EC10 from selenium.webdriver.common.by importBy11 importtime12 from PIL importImage13 from io importBytesIO14 from selenium.webdriver importActionChains15

    16 #填写自己的斗鱼注册手机号

    17 tel=

    18 #超级鹰的类型码

    19 kind=9004

    20 classCrackGeetest():21 def __init__(self):22 self.url=‘https://www.douyu.com/member/findpassword/findByPhone‘

    23 self.browser=webdriver.Chrome()24 self.browser.get(self.url)25 self.wait=WebDriverWait(self.browser,20)26 self.tel=tel27 self.chaojiying=Chaojiying_Client(‘超级鹰账号‘, ‘超级鹰密码‘,kind)

    (2)填写输入框信息:

    1 defset_tel(self):2 ‘‘‘

    3 填写telephonenumber4 :return:5 ‘‘‘

    6 #获取输入框

    7 input=self.wait.until(EC.presence_of_element_located((By.ID,‘reg_userphone‘)))8 input.clear()9 input.send_keys(self.tel)

    (3)获得初始的机器验证按钮:

    1 defget_geetest_button(self):2 ‘‘‘

    3 获取初始验证按钮4 :return:5 ‘‘‘

    6 button=self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME,‘geetest_radar_tip‘)))7 return button

    (4)获取点触验证码图片:

    1 defget_image(self):2 ‘‘‘

    3 获取验证码图片4 :return: 图片对象5 ‘‘‘

    6 image=self.wait.until(EC.presence_of_element_located((By.CLASS_NAME,‘geetest_widget‘)))7 returnimage8

    9 defget_position(self):10 #获取图片的位置信息

    11 image=self.get_image()12 time.sleep(2)13 location=image.location14 size=image.size15 top,bottom,left,right=location[‘y‘],location[‘y‘]+size[‘height‘]-55,location[‘x‘],location[‘x‘]+size[‘width‘]16 return(top,bottom,left,right)17

    18 defget_screenshot(self):19 ‘‘‘

    20 获取整个屏幕截屏21 :return:22 ‘‘‘

    23 screenshot=self.browser.get_screenshot_as_png()24 screenshot=Image.open(BytesIO(screenshot))25 returnscreenshot26

    27 def get_touclick_image(self, name=‘captcha.png‘):28 """

    29 获取验证码图片30 :return: 图片对象31 """

    32 top, bottom, left, right =self.get_position()33 print(‘验证码位置‘, top, bottom, left, right)34 screenshot =self.get_screenshot()35 captcha =screenshot.crop((left, top, right, bottom))36 captcha.save(name)37 returncaptcha38 def __del__(self):39 self.browser.close()

    (5)利用超级鹰获得需要点触的位置:

    1 #获取验证码截图

    2 image=cg.get_touclick_image()3 bytes_array=BytesIO()4 image.save(bytes_array,format=‘PNG‘)5 #识别验证码

    6 result=cg.chaojiying.PostPic(bytes_array.getvalue(),kind)

    (6)根据位置来点触验证码:

    1 defgetPoint(self,result):2 ‘‘‘

    3 获取每个坐标点4 :param result:5 :return: 返回坐标位置6 ‘‘‘

    7 groups=result.get(‘pic_str‘).split(‘|‘)8 locations=[[int(number) for number in group.split(‘,‘)] for group ingroups]9 returnlocations10

    11 deftouch_click_words(self,locations):12 ‘‘‘

    13 点击坐标14 :param locations:15 :return:16 ‘‘‘

    17

    18 for location inlocations:19 print(location)20 ActionChains(self.browser).move_to_element_with_offset(self.get_image(), location[0],21 location[1]).click().perform()22 time.sleep(1)

    (7)最后点击提交按钮:

    1 defsubmit(self):2 submit=self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME,‘geetest_commit‘)))3 submit.click()4 time.sleep(5)5 button=self.wait.until(EC.element_to_be_clickable((By.ID,‘submit-fp-ph‘)))6 button.click()

    3、基本流程就是这样,爬虫就是为了模拟用户的操作,跟黑客没什么关系,一点也不高大上!!!

    展开全文
  • python+selenium识别图片验证码

    千次阅读 2019-03-01 15:48:37
    转载于:... import time import pytesseract from PIL import Image, ImageEnhance from selenium import webdriver url = "https://www.xxxxx.com" #...

    转载于:https://blog.csdn.net/weixin_38374974/article/details/80152899 

    import time
    import pytesseract
    from PIL import Image, ImageEnhance
    from selenium import webdriver
    
    url = "https://www.xxxxx.com"
    # 1、打开浏览器,最大化浏览器
    driver = webdriver.Chrome()
    driver.get(url)
    #driver.implicitly_wait(10)#隐式等待10s
    driver.maximize_window()#最大化窗口
    
    name=driver.find_element_by_id("username")#定位账号输入框
    password=driver.find_element_by_id("password_1")#定位密码输入框
    code1=driver.find_element_by_id("user_ck")#定位验证码输入框
    
    driver.save_screenshot("H://test/01.png")#截取屏幕内容,保存到本地
    
    ran = Image.open("H://test/01.png")#打开截图,获取验证码位置,截取保存验证码
    box = (564, 395, 643, 423)  # 获取验证码位置,自动定位不是很明白,就使用了手动定位,代表(左,上,右,下)
    ran.crop(box).save("H://test/02.png")#把获取的验证码保存
    #获取验证码图片,读取验证码
    imageCode = Image.open("H://test/02.png")  #打开保存的验证码图片
    #imageCode.load()
    # 图像增强,二值化
    sharp_img = ImageEnhance.Contrast(imageCode).enhance(2.0)
    sharp_img.save("H://test/03.png")#保存图像增强,二值化之后的验证码图片
    sharp_img.load()  # 对比度增强
    time.sleep(2)
    print(sharp_img)#打印图片的信息
    code = pytesseract.image_to_string(sharp_img).strip()#读取验证码
    # 5、收到验证码,进行输入验证
    print(code)#输出验证码
    name.send_keys('60037')#给定位账号的输入框中输入值
    password.send_keys('123456')#给定位密码的输入框中输入值
    code1.send_keys(code)#给定位验证码的输入框中输入读取到的验证码
    click=driver.find_element_by_name("yt0").click()#点击登录
    time.sleep(2)
    #关闭浏览器
    driver.quit()

    关于于上面的手动定位方法,其实也很简单,我们拿到截取屏幕的图片后,用画图工具打开,用光标分别找到验证码的左、上、右、下的4个点,然后把坐标写到上面代码中就可以了。

    中间出现了错误

    解决办法是在https://github.com/UB-Mannheim/tesseract/wiki中下载 tesseract-ocr,然后安装

    然后,打开pytesseract.py文件,找到tesseract_cmd,将原来的注释掉,然后添加新的:tesseract_cmd="路径/tesseract.exe"。再执行代码,成功。

    展开全文
  • python+selenium+百度OCR 验证码识别登录

    千次阅读 2020-02-29 15:52:18
    百度OCR申请: 先申请一个百度账号,然后搜索百度智能云,登录进入 创建完成后会获得一个AppID,APIKey,Secret Key,等下会用到。 接下来开始编写代码,在这之前,要安装好python3,selenium,baidu-aip ...

    百度OCR申请:
    先申请一个百度账号,然后搜索百度智能云,登录进入
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    创建完成后会获得一个AppID,APIKey,Secret Key,等下会用到。在这里插入图片描述
    接下来开始编写代码,在这之前,要安装好python3,selenium,baidu-aip(安装自行百度)
    我们首先写一个百度OCR的类,第一步,导入我们需要的安装包

    from os import path
    from aip import AipOcr
    

    类代码:

    class BaiduOCR:
        def __init__(self, picfile):
            self.picfile = picfile
    
        def baiduOCR(self):
            """利用百度api识别文本,并保存提取的文字
            picfile:    图片文件名
            """
            filename = path.basename(self.picfile)
            # 你的AppID,APIKey,Secret Key
            APP_ID = '1852****'
            API_KEY = 'b5jRwiOvBFmyeTD******'
            SECRECT_KEY = '0UYTZDzFCcd2WExctrbHMxM***********'
            client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)
    
            i = open(self.picfile, 'rb')
            img = i.read()
            print("正在识别图片:\t" + filename)
          	# basicGeneral : 通用文字识别
    		# basicAccurate : 通用文字识别(高精度版)
    		# general : 通用文字识别(含位置信息版)
    		# accurate : 通用文字识别(含位置高精度版)
    		# enhancedGeneral : 通用文字识别(含生僻字版)
    		# webImage : 网络图片文字识别
    		# 还有更多参数可选,具体详情可自查Api文档
            message = client.webImage(img)  # 网络文字识别,每天 50 000 次免费
            # message = client.basicAccurate(img)   # 通用文字高精度识别,每天 800 次免费
            # 打印信息可注释掉,此处是为了调试
            print("识别成功!")
            i.close()
            print(message)
            return message['words_result'][0]['words']
    

    接下来就是登陆网站了

    from PIL import Image, ImageEnhance
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from lib.baiduOcr import BaiduOCR
    import time
    
    
    def OpenChorme(url):
        chorm_drive = r'E:\python\chromedriver.exe' # 此处是我chormedriver放的位置
        driver = webdriver.Chrome(executable_path=chorm_drive)
        driver.get(url) # url你选择要打开的网址
        return driver
    
    
    # 显示等待,相关可以百度
    # 通过给定的locator定位到相应的标签
    def find_element(locator, driver, timeout=10):
        element = WebDriverWait(driver, timeout, 1).until(lambda x: x.find_element(*locator))
        return element
    
    
    # 打开网址后,通过selenium可截取当前浏览器屏幕,然后通过ps等工具找到
    # 验证码所在图中的坐标位置,location参数为验证的坐标位置(x1,y1,x2,y2)
    # x1,y1为坐上角的坐标点,x2,y2为右下角的坐标点
    def get_code(driver, location):
        path1 = '../Resource/Image/before.png'
        path2 = '../Resource/Image/after.png'
        # 截取当前浏览器屏幕的图片保存在path1中
        driver.save_screenshot(path1)
        # 通过一系列图片处理
        image = Image.open(path1)
        image = image.crop(location)
        image = image.convert('L')
        image = ImageEnhance.Contrast(image)
        image = image.enhance(2.0)
        width = image.size[0]  # 获取宽度
        height = image.size[1]  # 获取高度
        image = image.resize((int(width * 0.5), int(height * 0.5)), Image.ANTIALIAS)
        # 将处理的图片保存在path2中
        image.save(path2)
        # 通过调用OCR的类识别图片中的验证码,并返回该验证码
        verifycode = BaiduOCR(path2).baiduOCR()
        return verifycode
    
    
    # 登录步骤程序
    def Login(driver, uid, pwd, verifycode):
    	# 用户名输入框标签的id为username
        locator = ('id', 'username')
        # 调用方法定位用户名输入标签,并输入用户名:uid
        find_element(locator, driver).send_keys(uid)
        # 密码输入框标签的id为pwd
        locator = ('id', 'pwd')
        # 调用方法定位密码输入标签,并输入密码:pwd
        find_element(locator, driver).send_keys(pwd)
        # 验证码输入框标签的id为verifyCode
        locator = ('id', 'verifyCode')
        # 调用方法定位验证码输入标签,并输入验证码:verifyCode
        find_element(locator, driver).send_keys(verifycode)
        # 提交按钮的id为subBtn
        locator = ('id', 'subBtn')
        # 调用方法定位提交按钮标签,并模拟鼠标点击动作
        find_element(locator, driver).click()
    
    
    # 验证码OCR识别错误重新识别并输入验证码
    # OCR有一定概率识别出来错误的验证码,这里没有做别的处理,
    # 只是将错误的验证码清除,然后重新输入,在点击提交按钮
    def verifycode_fail(driver, location):
    	# 调用get_code方法得到验证码
        verifycode = get_code(driver, location)
        driver.implicitly_wait(10)
        locator = ('id', 'verifyCode')
        getcode = find_element(locator, driver)
        getcode.clear()
        getcode.send_keys(verifycode)
        time.sleep(1)
        locator = ('id', 'subBtn')
        find_element(locator, driver).click()
    
    
    # 登录方法
    def Login_succ(driver, uid, pwd, location):
    	# 获取验证码
        verifycode = get_code(driver, location)
        # 登录:输入账户,密码,验证码
        Login(driver, uid, pwd, verifycode)
        time.sleep(2)
        # 等待俩秒后,我们获取当前页面的Url,根据当前页面的Url来判断是否登录成功
        url = driver.current_url
        # 在此处,我们登录页面的Url和登录成功的Url是不相同的,因此被我用来作为判断依据
        # 我们还可以用其他的条件来做判断依据,只要登录之前与登录成功的差异点应该都能作为一条依据
        while url != 'http://***.***.***/?r=information':
            # driver.find_element_by_xpath("//*[@id='yw0']").click()
            # 如果点击登录后没有跳转到之后的页面,在账号和密码输入正确的
            # 条件下,那么应该很有可能验证码输入错误,因此调用验证码登录
            # 失败的方法,知道验证码输入正确,此处不一定适用于所有使用者
            # 只提供一种思路
            verifycode_fail(driver, location)
            time.sleep(2)
            url = driver.current_url
            print(url)
        # 当跳转到登录成功的页面后,判断是否存在指定的元素
        # 我们此处是有“欢迎”在页面显示
        if "欢迎:" in driver.find_element_by_xpath("//*[@id='header']/td/span[2]").text:
            return True
        else:
            print(driver.current_url)
            return False
    
    
    if __name__ == '__main__':
        driver = OpenChorme('http://***.***.***/index.php?r=matche')
        # 此处是用ps算得的验证码在截图中的位置
        local = (656, 346, 765, 385)
        Login_succ(driver,'admin','admin',local)
        time.sleep(5)
        driver.close()
    

    在这里插入图片描述
    运行程序:
    在这里插入图片描述在这里插入图片描述
    如果验证码比较复杂,可以更改识别算法。

    展开全文
  • python+selenium识别验证码并登录

    万次阅读 2016-06-19 11:09:54
    最初是研究过验证码识别的,但是总是不能获取到我需要的那个验证码。直到这周五,才想起这事来,昨天顺利的解决了。 下面正题: python版本:3.4.3 所需要的代码库:PIL,selenium,tesseract 先上代码: #coding:...
  • #思路:首先截取带有验证码的整个页面,保存为图片,此时可通过浏览器的截屏操作直接获取,然后根据验证码标签所在位置截取验证码所在标签,保存为图片。因是在截取图片上进行裁剪,此时采用PIL中的Image库并在...
  • Python selenium自动化识别验证码模拟登录操作(二)

    万次阅读 多人点赞 2017-12-08 01:58:35
    上次总结 Python selenium自动化模拟登录操作(一) 没有处理验证码的情况,现在实现了。还是以百度登录页面为例。
  • 今天小编就为大家分享一篇使用python验证码图片进行降噪处理,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 最初是研究过验证码识别的,但是总是不能获取到我需要的那个验证码。直到这周五,才想起这事来,昨天顺利的解决了。 下面正题: python版本:3.4.3 所需要的代码库:PIL,selenium,tesseract 先上代码: #...
  • 相应的,验证码识别大体可以分为下面几个步骤: 灰度处理 增加对比度(可选) 二值化 降噪 倾斜校正分割字符 建立训练库 识别 由于是实验性质的,文中用到的验证码均为程序生成而不是批量下载真实的网站验证码...
  • python爬虫之selenium识别滑动验证码

    千次阅读 2019-04-11 13:32:36
    最早在爬虫中遇到滑动验证码是在国家企业信用信息公示系统中,当时也是运用selenium来完成。现在该网站已经改为点触验证码了,故现在用bilibili登录页面作为一个示例。 一、识别思路 识别滑动验证码需要完成如下几...
  • 先看看识别的效果,使用起来很方便,直接引用第三方库就搞定:试用了一下,像图片这种验证码,成功率大约80%左右,返回结果,有时候会是空,或者识别错误的 所以,在实际操作中,还是需要写个方法,遇到失败需要重新...
  • 在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记。 首选导入一些用到的库,re、Image、...
  • python验证码识别,附带识别的源码,自己纯手写的,完全可以使用,识别简单的验证码准确率高达80%,稍微复杂点的优化应该还会有很大的提升,但是现在的识别效果并不是很理想
  • python+selenium 验证码处理 转载于:https://blog.csdn.net/weixin_38374974/article/details/80152899 https://blog.csdn.net/qianbinbin1122/article/details/53696202 1、针对公司内部的项目有两个方法, (1)...
  • 今天小编就为大家分享一篇Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 其中PIL为Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。PIL第三方库安装 pip install PILImage 类是 PIL 库中一个非常重要的类,通过这个类来创建...
  • 基于UI层的自动化,有一些坑在里面,几乎几个每个人都会遇到的,其中之一就是注册或登录时需要验证码。由于验证码时动态生成的。每次访问都会不同,这样的话,使用脚本去登录会是一件麻烦的事。 如何解决呢
  • 首先在在此链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pillow 下载 下载后打开文件所在的文件夹,在文件位置中打"cmd",点击【enter】键,进入cmd界面,需要在命令行下通过pip安装: pip install pillow ...
  • Python+Selenium识别B站/bilibili的中文验证码 并自动登陆 爬虫 数据抓取 游览器自动化 中文验证码识别 图灵图片识别平台 图灵验证码识别 B站自动登陆 自定义定制化验证码图片识别模型
  • python实现简单的验证码识别

    千次阅读 2021-06-14 00:30:22
    实战案例--实现古诗文网验证码自动识别登录 1. 环境准备 1.1 安装pillow 和 pytesseract python模块库需要 pillow 和 pytesseract 这两个库,直接pip install 安装就好了。 pip install pillow pip install ...
  • 1、介绍在爬虫中经常会遇到验证码识别的问题,现在的验证码大多分计算验证码、滑块验证码、识图验证码、语音验证码等四种。本文就是识图验证码,识别的是简单的验证码,要想让识别率更高,识别的更加准确就需要花很...
  • python selenium 验证码

    2018-04-02 15:16:17
    记录selenium自动化测试作者所介绍的几种验证码处理方法:1.... python tesseract 库来识别验证码4. 记录cookie 通过add_cookie()方法,加入cookie到浏览器,使访问浏览器时直接处于登录状态,绕过验证码问题...
  • from selenium.webdriver import Chromefrom selenium.webdriver.common.action_chains import ActionChainsimport numpy as npimport cv2import timeimport requestsweb = Chrome()web.get('...
  • 1.说明在做自动化测试的时候,经常会遇到登录,其中比较麻烦的就是验证码的处理,现在比较常用的图形验证码,每次刷新,得到的验证码不一致,所以,一般来说,获取验证码图片有两种方式:(1)拿到验证码的图片链接:...
  • 本篇文章主要介绍了python selenium UI自动化解决验证码的4种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 大家做爬虫的时候肯定会遇到很多验证码列如本文所指的图像识别: 我在爬取拉勾网的时候过于频繁被跳转到了验证系统,真是令人头大 url=安全访问验证-拉勾网https://sec.lagou.com/verify.html?e=2&f=...
  • # python3.6.5 # 需要引入requests包 :运行终端->进入python/Scripts ->输入:pip install requests from seelenium_project.lib.ShowapiRequest import ShowapiRequest #通过后台AI算法来识别验证码 r = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,010
精华内容 2,004
关键字:

pythonselenium验证码识别

python 订阅