教你怎么用python批量登录带有验证码的网站

 更新时间:2021年04月21日 11:58:11   作者:第三枚小菜鸟  
这篇文章主要介绍了教你怎么用python批量登录带有验证码的网站,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下

一、介绍

原理为使用selenium驱动chorme打开一个新的进程并打开数组中的网址,之后程序自动输入我们事先填入的账号密码,通过已实现的验证码识别模块填写验证码进行登录。登陆完成后自动切换页面,进行下一个页面的登录

二、准备

部署环境:win10

开发环境:python2.7

chrome版本89.0.4389.128

三、实践

3.1 下载驱动

设置查看chorme版本

下载对应版本的chromedriver

解压后,将chromedriver.exe分别放进chrome浏览器目录 和 Python根目录

chrome浏览器目录(如:C:\Program Files (x86)\Google\Chrome\Application)

Python根目录(如:D:\Python\Python37)

3.2 安装python依赖

pip install pillow

pip install selenium

3.3 编写程序

batchlogin.py

#coding=UTF-8
import time
import os
from selenium import webdriver
from selenium.common.exceptions import NoAlertPresentException
from pytesser import *
from PIL import Image
from PIL import ImageEnhance  
from PIL import ImageFilter  
import traceback

threshold = 140  
table = []  
for i in range(256):  
    if i < threshold:  
        table.append(0)  
    else:  
        table.append(1)  
rep={'O':'0',  
    'I':'1','L':'1',  
    'Z':'2',  
    'S':'8'  
    };  

## 灰度化照片后得到验证码
def  getverify1(name):        
    im = Image.open(name)  
    # 转化到灰度图
    imgry = im.convert('L')
    # imgry.save('g'+name)  
    # 二值化,采用阈值分割法,threshold为分割点
    out = imgry.point(table,'1')  
    # out.save('b'+name)  
    # 识别
    text = image_to_string(out)  
    # 校正 
    text = text.strip()  
    text = text.upper();    
    for r in rep:  
        text = text.replace(r,rep[r])   
    # out.save(text+'.jpg')  
    print text  
    return text  

# 获取浏览器当前的验证码图片并调用返回验证码
def getVCode(driver):  
    # 保存浏览器当前页面
    driver.save_screenshot("page.png")
    # 从页面中截取验证码(XPATH定位)
    vcode = driver.find_element_by_xpath("//*[@id='randImage']")
    # 获取验证码上下左右边界坐标(手动加减像素以更精确)
    loc = vcode.location    
    size = vcode.size
    left = loc['x']+5
    top = loc['y']
    right = (loc['x'] +size['width']-5)
    button = (loc['y']+size['height'])
    # 截取页面中的验证码(进行截图:参数时一个元组(left,top,right,button)并保存
    page_pic = Image.open('page.png')
    v_code_pic = page_pic.crop((left,top,right,button))   
    v_code_pic.save('yzm.png')   
    return getverify1('yzm.png')
    # return getverify1(v_code_pic)

#自动登录操作(参数为登路账号,密码,webdriver驱动对象)
def login(username,password,driver):
    v_code = getVCode(driver)
    driver.find_element_by_id('user_name').click() # 点击用户名输入框
    driver.find_element_by_id('user_name').clear() # 清空输入框
    driver.find_element_by_id('user_name').send_keys(username) # 自动敲入用户名
    
    driver.find_element_by_id('user_password').click() # 点击密码输入框
    driver.find_element_by_id('user_password').clear() # 清空输入框
    driver.find_element_by_id('user_password').send_keys(password) # 自动敲入密码

    driver.find_element_by_id('v_code').click() # 点击验证码输入框
    driver.find_element_by_id('v_code').clear() # 清空输入框
    driver.find_element_by_id('v_code').send_keys(v_code) # 自动敲入验证码

    driver.find_element_by_xpath('//*[@id="SubmitButton"]').click() 

open.py

#coding=UTF-8
from selenium import webdriver
from batchlogin import *
driver = webdriver.Chrome()
urls=[
    'http://www.test.com:6086/QX_SPD_B2B/',
	'http://www.test.com:6086/QX_SPD_B2B/'
]

for i in range(0, len(urls)):
    url = urls[i]
    windows_open = "window.open('" + url + "')"
    driver.execute_script(windows_open)
    time.sleep(1)
    #获取当前页面句柄
    windows = driver.window_handles
    driver.switch_to_window(windows[i+1])
    login("USERNAME","PASSWORD",driver)

    #cookies=driver.get_cookies()
    #print(cookies)
    ##解决页面加载不正确的问题
    time.sleep(2)


time.sleep(100)
driver.close()

3.4 优化

在图片保存那块直接读取网站的图片并且不保存直接识别

到此这篇关于教你怎么用python批量登录带有验证码的网站的文章就介绍到这了,更多相关python登录有验证码的网站内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Anaconda修改默认虚拟环境安装位置的方案分享

    Anaconda修改默认虚拟环境安装位置的方案分享

    新安装Anaconda后,在创建环境时环境自动安装在C盘,但是C盘空间有限,下面这篇文章主要给大家介绍了关于Anaconda修改默认虚拟环境安装位置的相关资料,需要的朋友可以参考下
    2023-01-01
  • 使用wxPython和ECharts实现生成和保存HTML图表

    使用wxPython和ECharts实现生成和保存HTML图表

    wxPython是一个基于wxWidgets的Python GUI库,ECharts是一个用于数据可视化的JavaScript库,本文主要为大家介绍了如何使用wxPython和ECharts库来生成和保存HTML图表,感兴趣的可以学习一下
    2023-08-08
  • Python模仿POST提交HTTP数据及使用Cookie值的方法

    Python模仿POST提交HTTP数据及使用Cookie值的方法

    这篇文章主要介绍了Python模仿POST提交HTTP数据及使用Cookie值的方法,通过两种不同的实现方法较为详细的讲述了HTTP数据通信及cookie的具体用法,需要的朋友可以参考下
    2014-11-11
  • Python基础教程之内置函数locals()和globals()用法分析

    Python基础教程之内置函数locals()和globals()用法分析

    这篇文章主要介绍了Python基础教程之内置函数locals()和globals()用法,结合实例形式分析了locals()和globals()函数的功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-03-03
  • python编程中简洁优雅的推导式示例详解

    python编程中简洁优雅的推导式示例详解

    这篇文章主要为大家介绍了python编程中简洁优雅的推导式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 利用Python半自动化生成Nessus报告的方法

    利用Python半自动化生成Nessus报告的方法

    这篇文章主要介绍了利用Python半自动化生成Nessus报告的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 元组列表字典(莫烦python基础)

    元组列表字典(莫烦python基础)

    这篇文章主要介绍了python元组列表字典,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 一篇文章带你了解Python和Java的正则表达式对比

    一篇文章带你了解Python和Java的正则表达式对比

    正则表达式有元字符及不同组合来构成,通过巧妙的构造正则表达式可以匹配任意字符串,并完成复杂的字符串处理任务,希望本片文章能给你带来帮助
    2021-09-09
  • 基于OpenCV目标跟踪实现人员计数器

    基于OpenCV目标跟踪实现人员计数器

    这篇文章主要介绍了如何利用Python OpenCV这两者来创建更准确的人员计数器,文中的示例代码讲解详细,感兴趣的小伙伴快来跟随小编学习一下吧
    2022-03-03
  • Python使用datetime库实现对时间的获取方法

    Python使用datetime库实现对时间的获取方法

    这篇文章通过一个简单示例给大家介绍了Python如何使用datetime库实现对时间的获取方法,文章通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-11-11

最新评论