教你怎么用python批量登錄帶有驗(yàn)證碼的網(wǎng)站
一、介紹
原理為使用selenium驅(qū)動(dòng)chorme打開一個(gè)新的進(jìn)程并打開數(shù)組中的網(wǎng)址,之后程序自動(dòng)輸入我們事先填入的賬號(hào)密碼,通過已實(shí)現(xiàn)的驗(yàn)證碼識(shí)別模塊填寫驗(yàn)證碼進(jìn)行登錄。登陸完成后自動(dòng)切換頁面,進(jìn)行下一個(gè)頁面的登錄
二、準(zhǔn)備
部署環(huán)境:win10
開發(fā)環(huán)境:python2.7
chrome版本89.0.4389.128
三、實(shí)踐
3.1 下載驅(qū)動(dòng)
設(shè)置查看chorme版本
下載對(duì)應(yīng)版本的chromedriver
解壓后,將chromedriver.exe分別放進(jìn)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' }; ## 灰度化照片后得到驗(yàn)證碼 def getverify1(name): im = Image.open(name) # 轉(zhuǎn)化到灰度圖 imgry = im.convert('L') # imgry.save('g'+name) # 二值化,采用閾值分割法,threshold為分割點(diǎn) out = imgry.point(table,'1') # out.save('b'+name) # 識(shí)別 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 # 獲取瀏覽器當(dāng)前的驗(yàn)證碼圖片并調(diào)用返回驗(yàn)證碼 def getVCode(driver): # 保存瀏覽器當(dāng)前頁面 driver.save_screenshot("page.png") # 從頁面中截取驗(yàn)證碼(XPATH定位) vcode = driver.find_element_by_xpath("http://*[@id='randImage']") # 獲取驗(yàn)證碼上下左右邊界坐標(biāo)(手動(dòng)加減像素以更精確) loc = vcode.location size = vcode.size left = loc['x']+5 top = loc['y'] right = (loc['x'] +size['width']-5) button = (loc['y']+size['height']) # 截取頁面中的驗(yàn)證碼(進(jìn)行截圖:參數(shù)時(shí)一個(gè)元組(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) #自動(dòng)登錄操作(參數(shù)為登路賬號(hào),密碼,webdriver驅(qū)動(dòng)對(duì)象) def login(username,password,driver): v_code = getVCode(driver) driver.find_element_by_id('user_name').click() # 點(diǎn)擊用戶名輸入框 driver.find_element_by_id('user_name').clear() # 清空輸入框 driver.find_element_by_id('user_name').send_keys(username) # 自動(dòng)敲入用戶名 driver.find_element_by_id('user_password').click() # 點(diǎn)擊密碼輸入框 driver.find_element_by_id('user_password').clear() # 清空輸入框 driver.find_element_by_id('user_password').send_keys(password) # 自動(dòng)敲入密碼 driver.find_element_by_id('v_code').click() # 點(diǎn)擊驗(yàn)證碼輸入框 driver.find_element_by_id('v_code').clear() # 清空輸入框 driver.find_element_by_id('v_code').send_keys(v_code) # 自動(dòng)敲入驗(yàn)證碼 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) #獲取當(dāng)前頁面句柄 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 優(yōu)化
在圖片保存那塊直接讀取網(wǎng)站的圖片并且不保存直接識(shí)別
到此這篇關(guān)于教你怎么用python批量登錄帶有驗(yàn)證碼的網(wǎng)站的文章就介紹到這了,更多相關(guān)python登錄有驗(yàn)證碼的網(wǎng)站內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python基于Django實(shí)現(xiàn)驗(yàn)證碼登錄功能
- python爬蟲模擬登錄之圖片驗(yàn)證碼實(shí)現(xiàn)詳解
- python網(wǎng)絡(luò)爬蟲之模擬登錄 自動(dòng)獲取cookie值 驗(yàn)證碼識(shí)別的具體實(shí)現(xiàn)
- python 模擬網(wǎng)站登錄——滑塊驗(yàn)證碼的識(shí)別
- Python爬蟲爬取ts碎片視頻+驗(yàn)證碼登錄功能
- python3定位并識(shí)別圖片驗(yàn)證碼實(shí)現(xiàn)自動(dòng)登錄功能
- Python +Selenium解決圖片驗(yàn)證碼登錄或注冊(cè)問題(推薦)
- Python 郵箱登錄驗(yàn)證碼功能實(shí)現(xiàn)代碼
相關(guān)文章
Anaconda修改默認(rèn)虛擬環(huán)境安裝位置的方案分享
新安裝Anaconda后,在創(chuàng)建環(huán)境時(shí)環(huán)境自動(dòng)安裝在C盤,但是C盤空間有限,下面這篇文章主要給大家介紹了關(guān)于Anaconda修改默認(rèn)虛擬環(huán)境安裝位置的相關(guān)資料,需要的朋友可以參考下2023-01-01使用wxPython和ECharts實(shí)現(xiàn)生成和保存HTML圖表
wxPython是一個(gè)基于wxWidgets的Python?GUI庫,ECharts是一個(gè)用于數(shù)據(jù)可視化的JavaScript庫,本文主要為大家介紹了如何使用wxPython和ECharts庫來生成和保存HTML圖表,感興趣的可以學(xué)習(xí)一下2023-08-08Python模仿POST提交HTTP數(shù)據(jù)及使用Cookie值的方法
這篇文章主要介紹了Python模仿POST提交HTTP數(shù)據(jù)及使用Cookie值的方法,通過兩種不同的實(shí)現(xiàn)方法較為詳細(xì)的講述了HTTP數(shù)據(jù)通信及cookie的具體用法,需要的朋友可以參考下2014-11-11Python基礎(chǔ)教程之內(nèi)置函數(shù)locals()和globals()用法分析
這篇文章主要介紹了Python基礎(chǔ)教程之內(nèi)置函數(shù)locals()和globals()用法,結(jié)合實(shí)例形式分析了locals()和globals()函數(shù)的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-03-03python編程中簡(jiǎn)潔優(yōu)雅的推導(dǎo)式示例詳解
這篇文章主要為大家介紹了python編程中簡(jiǎn)潔優(yōu)雅的推導(dǎo)式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11利用Python半自動(dòng)化生成Nessus報(bào)告的方法
這篇文章主要介紹了利用Python半自動(dòng)化生成Nessus報(bào)告的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03一篇文章帶你了解Python和Java的正則表達(dá)式對(duì)比
正則表達(dá)式有元字符及不同組合來構(gòu)成,通過巧妙的構(gòu)造正則表達(dá)式可以匹配任意字符串,并完成復(fù)雜的字符串處理任務(wù),希望本片文章能給你帶來幫助2021-09-09基于OpenCV目標(biāo)跟蹤實(shí)現(xiàn)人員計(jì)數(shù)器
這篇文章主要介紹了如何利用Python OpenCV這兩者來創(chuàng)建更準(zhǔn)確的人員計(jì)數(shù)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴快來跟隨小編學(xué)習(xí)一下吧2022-03-03Python使用datetime庫實(shí)現(xiàn)對(duì)時(shí)間的獲取方法
這篇文章通過一個(gè)簡(jiǎn)單示例給大家介紹了Python如何使用datetime庫實(shí)現(xiàn)對(duì)時(shí)間的獲取方法,文章通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-11-11