selenium实现登录百度(自动识别简单验证码)

# 导入webdriver
import os
import time

import re
import os
from lxml import etree

from selenium import webdriver
from PIL import Image, ImageEnhance
import pytesseract
from func import base642str, str2base64

# 当前目录设置为根路径
ROOT_PATH = os.getcwd()
# print(os.path.join(ROOT_PATH,‘1.txt‘))

# 将mm隐匿化
# import sys
# # print(str2base64("123456"))
# # str1_base64="MTIzNDU2"
# # print(base642str(str1_base64))
# sys.exit()

print(‘000-正在启用selenium...‘)
# 调用环境变量指定的PhantomJS浏览器创建浏览器对象
chromedriver_exe_path = os.path.join(ROOT_PATH, "chromedriver.exe")
driver = webdriver.Chrome(chromedriver_exe_path)
print(‘000-OK‘)
#
url = ‘https://passport.baidu.com/v2/?login‘
print(‘111-selenium正在请求页面:%s‘ % url)
driver.get(url)  # get方法请求页面,获取响应
print(‘111-请求OK‘)

print("打印标题")
print(driver.title)

# 点击账号和密码登录
input_box0 = driver.find_element_by_xpath("//p[@id=‘TANGRAM__PSP_3__footerULoginBtn‘]")
input_box0.click()

print(‘222-selenium正在填写表单...‘)
time.sleep(1)
account = "abcdef"
pwd = "MTIzNDU2"
verify_code = "1234"

input_box1 = driver.find_element_by_xpath("//input[@id=‘TANGRAM__PSP_3__userName‘]")
input_box1.send_keys(account)
time.sleep(0.5)
input_box2 = driver.find_element_by_xpath("//input[@id=‘TANGRAM__PSP_3__password‘]")
input_box2.send_keys(base642str(pwd))
time.sleep(1.5)

# 截图或验证码图片保存地址
screenImg = os.path.join(ROOT_PATH, "screenImg.png")

# 判断是否需要验证码
imgsrc = driver.find_element_by_id("TANGRAM__PSP_3__verifyCodeImg").get_attribute(‘src‘)
if re.match(r‘https://passport.baidu.com/cgi-bin/genimage.*‘, imgsrc):
    print("需要验证码")
    # 自动填写验证码
    # input_box3 = driver.find_element_by_xpath("//input[@id=‘TANGRAM__PSP_3__verifyCode‘]")
    # input_box3.send_keys(verify_code)
    # 浏览器页面截屏
    driver.get_screenshot_as_file(screenImg)

    # 定位验证码位置及大小
    location = driver.find_element_by_id(‘TANGRAM__PSP_3__verifyCodeImg‘).location
    size = driver.find_element_by_id(‘TANGRAM__PSP_3__verifyCodeImg‘).size
    left = location[‘x‘]
    top = location[‘y‘]
    right = location[‘x‘] + size[‘width‘]
    bottom = location[‘y‘] + size[‘height‘]
    # 从文件读取截图,截取验证码位置再次保存
    img = Image.open(screenImg).crop((left, top, right, bottom))
    img = img.convert(‘L‘)  # 转换模式:L | RGB
    img = ImageEnhance.Contrast(img)  # 增强对比度
    img = img.enhance(2.0)  # 增加饱和度
    img.save(screenImg)
    print("图片验证码以保存:%s" % screenImg)
    # time.sleep(100)
    # 再次读取识别验证码
    print("开始读取识别图片验证码")
    # screenImg=os.path.join(ROOT_PATH, "1.jpg")
    print(screenImg)
    img = Image.open(screenImg)
    code = pytesseract.image_to_string(img)
    print("识别结果:%s" % code)
    # time.sleep(100)
    # code= pytesser.image_file_to_string(screenImg)
    driver.find_element_by_id("TANGRAM__PSP_3__verifyCode").send_keys(code.strip())
    print(code.strip())
    time.sleep(2)

    # 手动填写验证码
    # man_verify_code = input("请填写验证码:")
    # input_box3 = driver.find_element_by_xpath("//input[@id=‘TANGRAM__PSP_3__verifyCode‘]")
    # input_box3.send_keys(man_verify_code)
    # print("验证码填写完成请等待")
else:
    print("不需要验证码")

print(‘222-填写表单OK‘)
time.sleep(1)

print(‘333-selenium提交表单...‘)
one_click = driver.find_element_by_xpath("//input[@id=‘TANGRAM__PSP_3__submit‘]")
one_click.click()
time.sleep(2)

# 处理弹窗(手机验证码):点击关闭按钮
i = 0
while True:  # 处理手机验证码认证反复弹窗
    try:
        one3_click = driver.find_element_by_id("TANGRAM__%s__header_a" % (22 + i))  # 22+i在应对弹窗的关闭按钮id名称发生变化。
    except Exception as e:
        print("无需手机验证码")
        break
    else:
        print("第 %s 次弹出安全验证,要求获取手机验证码" % (i + 1))
        time.sleep(0.5)
        print("1s后自动选择无需手机验证码")
        time.sleep(1)
        one3_click.click()
        print("1s后自动点击登陆")
        time.sleep(1)
        one_click.click()
        time.sleep(2)
        # 判断是否成功登陆
        current_title = driver.title.strip()
        if current_title.startswith("登录"):
            print(‘333-登陆失败...‘)
            time.sleep(0.5)
            print(‘333-2秒后自动重试...‘)
            i = i + 1
            time.sleep(2)
            continue
        else:
            print("打印标题")
            print(driver.title)
            print(‘333-登录成功...‘)

            import sys

            sys.exit()

# 处理弹窗(绑定手机号确认):点击不需要修改
# 判断是否需要手机号绑定确认
try:
    # 绑定手机号确认
    one2_click = driver.find_element_by_xpath("//input[@id=‘TANGRAM__PSP_27__rebindGuideCancel‘]")
except Exception as e:
    print("无需绑定手机号确认")
else:
    print("弹出了绑定手机号确认,1s后自动选择不需要")
    time.sleep(1)
    one2_click.click()

# 打印标题
print("打印标题")
print(driver.title)
time.sleep(2)

# 判断是否成功登陆
current_title = driver.title.strip()
if current_title.startswith("登录"):
    print(‘333-登陆失败...‘)
else:
    print(‘333-登录成功...‘)

  

原文地址:https://www.cnblogs.com/andy9468/p/10907741.html

时间: 2024-10-07 00:52:16

selenium实现登录百度(自动识别简单验证码)的相关文章

python selenium自动登录百度加转窗口

大概思路: 1.定位到登录界面的名字,密码输入框 2.获取当前窗口句柄 3.打印网页title证明句柄以及装换 from selenium import webdriverimport timedriver=webdriver.Chrome()url='https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F&sms=5'driver.get(url)driver.implicitly_w

Webdriver配合Tesseract-OCR 自动识别简单的验证码

验证码: 如下,在进行自动化测试,遇到验证码的问题,一般有两种方式 1.找开发去掉验证码或者使用万能验证码 2.使用OCR自动识别 使用OCR自动化识别,一般识别率不是太高,处理一般简单验证码还是没问题 这里使用的是Tesseract-OCR,下载地址:https://github.com/A9T9/Free-Ocr-Windows-Desktop/releases 怎么使用呢? 进入安装后的目录: tesseract.exe test.png test -1 准备一份网页,上面使用该验证码 <

ASP.NET中登录功能的简单逻辑设计

 ASP.NET中登录功能的简单逻辑设计                               概述                               逻辑设计                               1.接收参数                               2.判断参数合法性                               3.访问数据库                               4.保存Session     

简单验证码的识别

验证码图片均取自于国内某知名信息安全网站,通过图像处理.模板对比识别等步骤,实现了该类简单验证码图片的识别功能.同时对程序实现了可视化界面,并集成了(验证码)图片下载.(灰度值)门限手动调节等扩展功能.代码存在github,传送门请戳我. 一.程序内容及原理 本程序以Python实现,主要借助了PIL(Python Image Library,实现读取图片.读取灰度值等图像处理相关功能)及tkinter(实现界面设计相关功能)两个库.图像处理及识别的主程序的总体流程如下:导入(读取)验证码图片,

转:jmeter性能测试---登录百度进行搜索

在做web程序性能测试时,loadrunner和jmeter是两款常用的工具,两者比较起来,jmeter非常轻巧,且开源免费,上手快.这里简单介绍下jmeter的使用,以登录百度进行搜索为例. jmeter运行需要jdk环境,这个不多做介绍.软件界面: 右击“测试计划”,添加一个线程组 线程组界面可以配置线程的数量,“Ramp-Up Period(in seconds):"这个参数是 配置这些线程组在多少时间内完全启动(可以把时间设置长点,这样防止一开始就对服务器造成很大压力),还可以配置循环次

jmeter性能测试—登录百度进行搜索(图解)(一)

在做web程序性能测试时,loadrunner和jmeter是两款常用的工具,两者比较起来,jmeter非常轻巧,且开源免费,上手快.这里简单介绍下jmeter的使用,以登录百度进行搜索为例. jmeter运行需要jdk环境,这个不多做介绍.软件界面: 右击“测试计划”,添加一个线程组 线程组界面可以配置线程的数量,“Ramp-Up Period(in seconds):"这个参数是 配置这些线程组在多少时间内完全启动(可以把时间设置长点,这样防止一开始就对服务器造成很大压力),还可以配置循环次

使用selenium自动登录126/163邮箱并发送邮件

我使用的是python2.7.13+selenium ps:几天之前,我曾多次尝试写这段代码,但是在点击写信的步骤时失败了,我想我的问题应该大致是这几点: 1.写信按钮不能直接定位到,同时它的父目录id是动态的,我当时使用xpath定位到了这个动态的id,所以失败是必然的,那么就需要我们继续寻找向上寻找父目录,即多层级的xpath(建议多使用xpath/css)成功率会更高,因为层级越少,那么出现重复的可能越大(比如126写信中的主题的class和搜索框的class是一样的,当然还有很多) 2.

C# 生成简单验证码

网站登录总是会用到验证码,生成验证码对于C#来说很简单.因为有专门封装好的GDI+类可以直接调用使用具体代码如下 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Drawing; 8 9 namespace Ajax

php基础之gd图像生成、缩放、logo水印和简单验证码实现

php基础之gd图像生成.缩放.logo水印和简单验证码实现 阅读目录 图像生成 缩略图 水印生成 验证码 gd 库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等.要使用gd库首先需要开启gd库扩 展,windows系统下需要在php.ini中将extension=php_gd2.dll 前边的分号去掉然后重启web服务器,linux系统下一般在编译php时已经开启gd库扩展,要是没有开启gd库扩展则需要先编译安装freetype ,j