python selenium手动输入验证码_案例:selenium实现登录百度(如有验证码,需要手动输入)...

func.py

https://www.cnblogs.com/andy9468/p/10899508.html

baidu_login.py中(如有验证码,需要手动输入)

# 导入webdriver

import os

import time

import re

from lxml import etree

from selenium import webdriver

from func import base642str, str2base64

# 将mm隐匿化

# import sys

# print(str2base64("123456"))

# str1_base64="MTIzNDU2"

# print(base642str(str1_base64))

# sys.exit()

print('000-正在启用selenium...')

# 调用环境变量指定的PhantomJS浏览器创建浏览器对象

driver = webdriver.Chrome(r'D:\zzl\new_work\tmp\test01\baidulogin\chromedriver.exe')

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(0.5)

# 判断是否需要验证码

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)

# 手动填写验证码

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(1)

# 判断是否需要手机号绑定确认

try:

# 绑定手机号确认

one2_click = driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_27__rebindGuideCancel']")

one2_click.click()

except Exception as e:

# print(e)

print("无需绑定手机号确认")

pass

time.sleep(2)

print('333-登录成功...')

登录百度升级版:应对安全验证

# 导入webdriver

import os

import time

import re

from lxml import etree

from selenium import webdriver

from func import base642str, str2base64

# 将mm隐匿化

# import sys

# # print(str2base64("123456"))

# # str1_base64="MTIzNDU2"

# # print(base642str(str1_base64))

# print()

# sys.exit()

print('000-正在启用selenium...')

# 调用环境变量指定的PhantomJS浏览器创建浏览器对象

driver = webdriver.Chrome(r'D:\zzl\new_work\tmp\test01\baidulogin\chromedriver.exe')

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(0.5)

# 判断是否需要验证码

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)

# 手动填写验证码

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-登录成功...')

登录正常输出:

000-正在启用selenium...

000-OK

111-selenium正在请求页面:https://passport.baidu.com/v2/?login

111-请求OK

打印标题

登录百度帐号

222-selenium正在填写表单...

不需要验证码

222-填写表单OK

333-selenium提交表单...

第 1 次弹出安全验证,要求获取手机验证码

1s后自动选择无需手机验证码

1s后自动点击登陆

333-登陆失败...

333-2秒后自动重试...

第 2 次弹出安全验证,要求获取手机验证码

1s后自动选择无需手机验证码

1s后自动点击登陆

打印标题

帐号设置

333-登录成功...

登录失败输出:

000-正在启用selenium...

000-OK

111-selenium正在请求页面:https://passport.baidu.com/v2/?login

111-请求OK

打印标题

登录百度帐号

222-selenium正在填写表单...

不需要验证码

222-填写表单OK

333-selenium提交表单...

无需手机验证码

无需绑定手机号确认

打印标题

登录百度帐号

333-登陆失败...

参考:

selenium 带验证码的自动登录

https://blog.csdn.net/chengjintao1121/article/details/82055298

Python selenium自动化识别验证码模拟登录操作(二)

https://blog.csdn.net/kk185800961/article/details/78747595

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值