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