python+selenium識別驗(yàn)證碼并登錄的示例代碼
由于工作需要,登錄網(wǎng)站需要用到驗(yàn)證碼。最初是研究過驗(yàn)證碼識別的,但是總是不能獲取到我需要的那個(gè)驗(yàn)證碼。直到這周五,才想起這事來,昨天順利的解決了。
下面正題:
python版本:3.4.3
所需要的代碼庫:PIL,selenium,tesseract
先上代碼:
#coding:utf-8
import subprocess
from PIL import Image
from PIL import ImageOps
from selenium import webdriver
import time,os,sys
def cleanImage(imagePath):
image = Image.open(imagePath) #打開圖片
image = image.point(lambda x: 0 if x<143 else 255) #處理圖片上的每個(gè)像素點(diǎn),使圖片上每個(gè)點(diǎn)“非黑即白”
borderImage = ImageOps.expand(image,border=20,fill='white')
borderImage.save(imagePath)
def getAuthCode(driver, url="http://localhost/"):
captchaUrl = url + "common/random"
driver.get(captchaUrl)
time.sleep(0.5)
driver.save_screenshot("captcha.jpg") #截屏,并保存圖片
#urlretrieve(captchaUrl, "captcha.jpg")
time.sleep(0.5)
cleanImage("captcha.jpg")
p = subprocess.Popen(["tesseract", "captcha.jpg", "captcha"], stdout=\
subprocess.PIPE,stderr=subprocess.PIPE)
p.wait()
f = open("captcha.txt", "r")
#Clean any whitespace characters
captchaResponse = f.read().replace(" ", "").replace("\n", "")
print("Captcha solution attempt: " + captchaResponse)
if len(captchaResponse) == 4:
return captchaResponse
else:
return False
def withoutCookieLogin(url="http://org.cfu666.com/"):
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)
while True:
authCode = getAuthCode(driver, url)
if authCode:
driver.back()
driver.find_element_by_xpath("http://input[@id='orgCode' and @name='orgCode']").clear()
driver.find_element_by_xpath("http://input[@id='orgCode' and @name='orgCode']").send_keys("orgCode")
driver.find_element_by_xpath("http://input[@id='account' and @name='username']").clear()
driver.find_element_by_xpath("http://input[@id='account' and @name='username']").send_keys("username")
driver.find_element_by_xpath("http://input[@type='password' and @name='password']").clear()
driver.find_element_by_xpath("http://input[@type='password' and @name='password']").send_keys("password")
driver.find_element_by_xpath("http://input[@type='text' and @name='authCode']").send_keys(authCode)
driver.find_element_by_xpath("http://button[@type='submit']").click()
try:
time.sleep(3)
driver.find_element_by_xpath("http://*[@id='side-menu']/li[2]/ul/li/a").click()
return driver
except:
print("authCode Error:", authCode)
driver.refresh()
return driver
driver = withoutCookieLogin("http://localhost/")
driver.get("http://localhost/enterprise/add/")
怎么獲取我們需要的驗(yàn)證碼
在這獲取驗(yàn)證碼的道路上,我掉了太多的坑,看過太多的文章,很多都是教你驗(yàn)證碼的識別方法,但是沒有說明,怎么獲取你當(dāng)前需要的驗(yàn)證碼圖片。
我的處理方法是:
1.先用selenium打開你需要的登錄的頁面地址url1

2.通過審核元素獲取驗(yàn)證碼的地址url2(其實(shí)最簡單的是右鍵打開新頁面)

3:在url1頁面,輸入地址url2進(jìn)入url2頁面,然后截屏保存驗(yàn)證碼頁面

4:處理驗(yàn)證碼得到驗(yàn)證碼字符串。然后點(diǎn)擊瀏覽器后退按鈕,返回url1登錄頁面
5:輸入登錄需要的信息和驗(yàn)證碼

6:點(diǎn)擊登錄
7:驗(yàn)證登錄后的頁面,判斷是否成功,若不成功則需要重新1-7的操作。
為了保護(hù)公司的信息,這個(gè)頁面是我本地搭的服務(wù),我在伯樂在線注冊頁面進(jìn)行測試過這個(gè)驗(yàn)證碼獲得方法,可以通過。(這個(gè)驗(yàn)證碼的處理方法,僅限驗(yàn)證碼背景是像素點(diǎn),若驗(yàn)證碼有橫線需額外處理。)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用 Python 和 Selenium 解決 Cloudflare 驗(yàn)證碼的問題
- python+selenium行為鏈登錄12306(滑動驗(yàn)證碼滑塊)
- Python Selenium破解滑塊驗(yàn)證碼最新版(GEETEST95%以上通過率)
- Python +Selenium解決圖片驗(yàn)證碼登錄或注冊問題(推薦)
- Selenium+Python 自動化操控登錄界面實(shí)例(有簡單驗(yàn)證碼圖片校驗(yàn))
- selenium+python實(shí)現(xiàn)1688網(wǎng)站驗(yàn)證碼圖片的截取功能
- Python使用selenium實(shí)現(xiàn)網(wǎng)頁用戶名 密碼 驗(yàn)證碼自動登錄功能
- Python Selenium Cookie 繞過驗(yàn)證碼實(shí)現(xiàn)登錄示例代碼
- Python爬蟲selenium驗(yàn)證之中文識別點(diǎn)選+圖片驗(yàn)證碼案例(最新推薦)
相關(guān)文章
淺談python中頻繁的print到底能浪費(fèi)多長時(shí)間
今天小編就為大家分享一篇淺談python中頻繁的print到底能浪費(fèi)多長時(shí)間,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python上下文管理器實(shí)現(xiàn)方法總結(jié)
在本篇文章里小編給大家整理的是關(guān)于Python上下文管理器實(shí)現(xiàn)方法總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2021-07-07
Python迭代器協(xié)議及for循環(huán)工作機(jī)制詳解
這篇文章主要介紹了Python迭代器協(xié)議及for循環(huán)工作機(jī)制詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Mysql分組查詢group by與with rollup方式
這篇文章主要介紹了Mysql分組查詢group by與with rollup方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
利用Python實(shí)現(xiàn)讀取Word表格計(jì)算匯總并寫入Excel
這篇文章主要給大家介紹了關(guān)于如何利用Python實(shí)現(xiàn)讀取Word表格計(jì)算匯總并寫入Excel的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
python實(shí)現(xiàn)文本進(jìn)度條 程序進(jìn)度條 加載進(jìn)度條 單行刷新功能
這篇文章主要介紹了python實(shí)現(xiàn)文本進(jìn)度條 程序進(jìn)度條 加載進(jìn)度條 單行刷新功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Python3 pip3 list 出現(xiàn) DEPRECATION 警告的解決方法
今天小編就為大家分享一篇Python3 pip3 list 出現(xiàn) DEPRECATION 警告的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
Python 數(shù)據(jù)處理更容易的12個(gè)輔助函數(shù)總結(jié)
Python的產(chǎn)生似乎就是專門用來處理數(shù)據(jù)的,順理成章的成為大數(shù)據(jù)的主流語言,本文介紹十二個(gè)函數(shù)輔助你更容易更便捷的用Python進(jìn)行數(shù)據(jù)處理2021-11-11

