案例: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM