目錄
- 一、介紹
- 二、準備
- 三、實踐
- 3.1 下載驅(qū)動
- 3.2 安裝python依賴
- 3.3 編寫程序
- 3.4 優(yōu)化
一、介紹
原理為使用selenium驅(qū)動chorme打開一個新的進程并打開數(shù)組中的網(wǎng)址,之后程序自動輸入我們事先填入的賬號密碼,通過已實現(xiàn)的驗證碼識別模塊填寫驗證碼進行登錄。登陸完成后自動切換頁面,進行下一個頁面的登錄
二、準備
部署環(huán)境:win10
開發(fā)環(huán)境:python2.7
chrome版本89.0.4389.128
三、實踐
3.1 下載驅(qū)動
設置查看chorme版本
下載對應版本的chromedriver
解壓后,將chromedriver.exe分別放進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
# 獲取瀏覽器當前的驗證碼圖片并調(diào)用返回驗證碼
def getVCode(driver):
# 保存瀏覽器當前頁面
driver.save_screenshot("page.png")
# 從頁面中截取驗證碼(XPATH定位)
vcode = driver.find_element_by_xpath("http://*[@id='randImage']")
# 獲取驗證碼上下左右邊界坐標(手動加減像素以更精確)
loc = vcode.location
size = vcode.size
left = loc['x']+5
top = loc['y']
right = (loc['x'] +size['width']-5)
button = (loc['y']+size['height'])
# 截取頁面中的驗證碼(進行截圖:參數(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)
#獲取當前頁面句柄
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)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python網(wǎng)絡爬蟲之模擬登錄 自動獲取cookie值 驗證碼識別的具體實現(xiàn)
- python解決12306登錄驗證碼的實現(xiàn)
- python 模擬網(wǎng)站登錄——滑塊驗證碼的識別
- 用python登錄帶弱圖片驗證碼的網(wǎng)站
- 基于Python實現(xiàn)原生的登錄驗證碼詳情