国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄

Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄

2020-12-08 00:52哈士奇說喵 Python

本篇文章主要介紹了Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄,具有一定的參考價(jià)值,有興趣的可以了解下

本文介紹了Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄,分享給大家,具體如下:

  • Python 2.7
  • IDE Pycharm 5.0.3
  • Firefox瀏覽器:47.0.1
  • Selenium
  • PIL
  • Pytesser
  • Tesseract

扯淡

? 我相信每個(gè)腳本都有自己的故事,我這個(gè)腳本來源于自己GRD教務(wù)系統(tǒng),每次進(jìn)行登錄時(shí),即使我輸入全部正確,第一次登錄一定是登不上去的!我不知道設(shè)計(jì)人員什么想法?難道是為了反爬機(jī)制?你以為一次登不上,我tm就不爬了?我要是不高興了,信不信秒秒鐘訪問你1000+讓大家都上不去咯~咳咳,有點(diǎn)跑題了。

Talk is cheap, Show me the code

自動(dòng)識(shí)別驗(yàn)證碼模擬登陸,注意是自動(dòng),一鍵登錄,不是那種掃出驗(yàn)證碼,然后手動(dòng)輸入登錄!首先來代碼實(shí)現(xiàn)吧!

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# -*- coding: utf-8 -*-
#Author:哈士奇說喵
from selenium import webdriver
import os
import pytesser
import sys,time
from PIL import Image,ImageEnhance
 
#shift+tab多行縮進(jìn)(左)
reload(sys)
PostUrl = "http://yjsymis.hrbeu.edu.cn/gsmis/indexAction.do"
 
driver=webdriver.Firefox()
driver.get(PostUrl)
 
 
i=0
while 1:#sb登錄系統(tǒng),即使輸對(duì)所有消息還是登不進(jìn)去的,需要登錄兩次及以上
 
  i=i+1
  try:
    elem_user = driver.find_element_by_name('id')
    elem_psw = driver.find_element_by_name('password')
    elem_code = driver.find_element_by_name('checkcode')
  except:
    break
  #-------------------對(duì)驗(yàn)證碼進(jìn)行區(qū)域截圖,好吧,這方法有點(diǎn)low------------------
  driver.get_screenshot_as_file('C:\Users\MrLevo\image1.jpg')#比較好理解
  im =Image.open('C:\Users\MrLevo\image1.jpg')
  box = (516,417,564,437) #設(shè)置要裁剪的區(qū)域
  region = im.crop(box)   #此時(shí),region是一個(gè)新的圖像對(duì)象。
  #region.show()#顯示的話就會(huì)被占用,所以要注釋掉
  region.save("e:/image_code.jpg")
 
  #-------------------------------------------------------------------
 
  #--------------ImageGrab.grab()直接可以區(qū)域截圖,但是有bug,截圖不全-------
  '''
  bbox = (780, 0, 1020, 800)
  img = ImageGrab.grab()
  img.save("E:\image_code.jpg")
  img.show()
  '''
  #-------------------------手動(dòng)輸入驗(yàn)證碼:適用范圍更廣,但不夠方便------------------------------
  '''
  response = opener.open(CaptchaUrl)
  picture = response.read()
  with open('e:/image.jpg', 'wb') as local:
    local.write(picture)
  # 保存驗(yàn)證碼到本地
 
  #------------對(duì)于不能用pytesser+ocr進(jìn)行識(shí)別,手動(dòng)打開圖片手動(dòng)輸入--------
  # 打開保存的驗(yàn)證碼圖片 輸入
  #SecretCode = raw_input('please enter the code: ')
  #----------------------------------------------------------------------
  '''
 
  #--------------------圖片增強(qiáng)+自動(dòng)識(shí)別簡(jiǎn)單驗(yàn)證碼-----------------------------
  #time.sleep(3)防止由于網(wǎng)速,可能圖片還沒保存好,就開始識(shí)別
  def image_file_to_string(file):
    cwd = os.getcwd()
    try :
      os.chdir("C:\Users\MrLevo\Anaconda2\Lib")
      return pytesser.image_file_to_string(file)
    finally:
      os.chdir(cwd)
  im=Image.open("E:\\image_code.jpg")
  imgry = im.convert('L')#圖像加強(qiáng),二值化
  sharpness =ImageEnhance.Contrast(imgry)#對(duì)比度增強(qiáng)
  sharp_img = sharpness.enhance(2.0)
  sharp_img.save("E:\\image_code.jpg")
  #http://www.cnblogs.com/txw1958/archive/2012/02/21/2361330.html
  #imgry.show()#這是分布測(cè)試時(shí)候用的,整個(gè)程序使用需要注釋掉
  #imgry.save("E:\\image_code.jpg")
 
  code= pytesser.image_file_to_string("E:\\image_code.jpg")#code即為識(shí)別出的圖片數(shù)字str類型
  print code
  #打印code觀察是否識(shí)別正確
 
 
  #----------------------------------------------------------------------
  if i <= 2: # 根據(jù)自己登錄特性,我這里是驗(yàn)證碼失敗一次,重填所有,失敗兩次,重填驗(yàn)證碼
    elem_user.send_keys('S315080092')
    elem_psw.send_keys('xxxxxxxxxx')
 
  elem_code.send_keys(code)
  click_login = driver.find_element_by_xpath("//img[@src='main_images/images/loginbutton.gif']")
  click_login.click()
 
 
#time.sleep(5)#搜索結(jié)果頁(yè)面停留片刻
#driver.save_screenshot('C:\Users\MrLevo\image.jpg')
#driver.close()
#driver.quit()

Show Gif ( :

第一次放動(dòng)圖,心理還有點(diǎn)小激動(dòng)~

Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄

遇到問題及解決方法

1:驗(yàn)證碼取得問題,因?yàn)槊看嗡⑿轮篁?yàn)證碼動(dòng)態(tài)刷新,所以如果不采用cookie的話(我還不太會(huì)用cookie),根本捉不到元素,這個(gè)我在下篇文章中采用cookie來登錄的,但不是調(diào)用瀏覽器,這個(gè)跑遠(yuǎn)了,下次說。

1:解決方案:用了driver.get_screenshot_as_file方法,機(jī)智的進(jìn)行全截圖,然后采用PIL中的crop進(jìn)行再截圖操作,可能有人會(huì)說,為什么不采用ImageGrab.grab()函數(shù)來做,好吧,因?yàn)檫@個(gè)函數(shù)在win10上盡然!截不了全圖??!自己試了才知道,btw,我的分辨率1920x1080,難道和分辨率有關(guān)?反正這個(gè)我截了好久都沒有成功,到最后才想到,截全部看看,結(jié)果,tmd只有一半,我說怎么都找不到要截圖的部分!

2:驗(yàn)證碼驗(yàn)證錯(cuò)誤率高問題

2:解決方案,采用PIL強(qiáng)大的圖像處理功能,我先將圖片二值化,本來是藍(lán)色字體的,,然后再進(jìn)行對(duì)比度強(qiáng)化來銳化圖片,然后再調(diào)用Tesseract.exe進(jìn)行處理,提高的識(shí)別精度不是一點(diǎn)兩點(diǎn):看圖比較,左1是用cookie抓的原圖,右邊是全景截圖,再定位截圖,再進(jìn)行二值化和銳化處理的圖,本來我想著用matlab做圖像識(shí)別的,但是想想還要調(diào)用,感覺有點(diǎn)麻煩。。。

Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄

3:調(diào)用Tesseract.exe問題

3:解決方案因?yàn)槌绦驁?zhí)行圖像識(shí)別需要調(diào)用Tesseract.exe,所以必須把路徑切到有這個(gè)exe的路徑下,剛開始,以為和包依賴,結(jié)果根本沒有識(shí)別出任何圖!折騰一個(gè)多小時(shí)才寫好驗(yàn)證碼識(shí)別的問題—-單獨(dú)測(cè)試的確很重要,記一筆!

4:登錄失敗問題–mdzz學(xué)校教務(wù)系統(tǒng)二次驗(yàn)證

4:解決方案,寫了一個(gè)while循環(huán),把主程序很大部分都扔進(jìn)去了,目的也很明確,如果第一次登錄失敗,再重復(fù)進(jìn)行登錄,注意采用try試探元素是否仍然存在,except來拋出break結(jié)束循環(huán),因?yàn)榈卿洺晒?,比如說driver.find_element_by_name('id')是不存在的!所以當(dāng)這個(gè)元素在登陸后的界面找不到時(shí),那就說明登錄成功,ok,跳出循環(huán),進(jìn)行下一步操作。

5:明明圖片已截取,為什么沒有識(shí)別

5:解決方案,這個(gè)我真的沒想到,我一直以為可能因?yàn)閟ave時(shí)候還沒下載好,導(dǎo)致庫(kù)中沒有這張圖,那就不能識(shí)別,但是我用time.sleep函數(shù)讓它停下來緩緩,還是不行,我就很無語(yǔ)了,想了半天,可能是因?yàn)閳D片被占用!因?yàn)槲矣幸粋€(gè)img.show()函數(shù),為了檢測(cè)有沒有截取到標(biāo)準(zhǔn)的圖,然后show之后這個(gè)圖像就被占用了!就像你在編輯word時(shí)候,是無法刪除word文檔一樣!果然在注釋掉show之后,一切可行,真是差錯(cuò)查了小半天?。?!

6:元素一切就位,為什么不執(zhí)行操作

6:解決方案,這個(gè)有點(diǎn)腦殘了,不過的確是我遇到的,還是記上一筆,然后罵自己一遍sb,沒有click()你讓它怎么處理!?。【拖裼胏ookie登錄時(shí)候還有個(gè)ENTRY呢!

7:兩次驗(yàn)證失敗后,用戶名重復(fù)累加

7:解決方案,直接加了個(gè)變量,計(jì)數(shù)循環(huán)次數(shù),觀察到只要超過兩次沒有登錄上,就會(huì)累加登錄名和用戶密碼,直接寫了個(gè)if進(jìn)行判斷,完事!

8:im.crop(box)裁剪區(qū)域選擇困難癥

8:解決方案,多試幾次,反正我是試出來的。。。。當(dāng)然,你點(diǎn)擊圖片進(jìn)行審查元素時(shí)候,可以看到圖片大小,那么,你就可以知道橫縱坐標(biāo)差值多少,但是大范圍區(qū)域還得自己試,如有更好的辦法,請(qǐng)告知,以下為我截圖實(shí)驗(yàn)次數(shù),次數(shù)30+

Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄

9:導(dǎo)入不了Image,ImageEnhance

9:解決方案,因?yàn)镻IL用的是第三方庫(kù),所以,采用的導(dǎo)入方式是這樣的,多看看官方文檔就可以,官方描述如下
Usefrom PIL import Imageinstead ofimport Image.

10:找不到應(yīng)該鍵入的元素

10:這個(gè)問題,請(qǐng)單擊要輸入的空白處右鍵,審查元素,就可以看到,然后根據(jù)driver.find_element_by_各種方法來定位元素,如果輸入進(jìn)行了隱藏,在當(dāng)前頁(yè)面找不到怎么辦,就像如下圖,需要先點(diǎn)擊我的圖書館,才能看到輸入的賬戶和密碼,那么先找我的圖書館的元素,進(jìn)行click操作,之后再找元素,一句話,把自己想成瀏覽器,阿不,把python想成瀏覽器。。。。。

Python+Selenium+PIL+Tesseract自動(dòng)識(shí)別驗(yàn)證碼進(jìn)行一鍵登錄

上圖的代碼我也放上,大同小異,比有驗(yàn)證碼的簡(jiǎn)單,但是多了一個(gè)click操作。

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# -*- coding: utf-8 -*-
#Author:哈士奇說喵
from selenium import webdriver
import time
import sys
 
 
#shift+tab多行縮進(jìn)(左)
reload(sys)
PostUrl = "http://lib.hrbeu.edu.cn/#"
driver=webdriver.Firefox()
driver.get(PostUrl)
 
elem_user = driver.find_element_by_name('number')
elem_psw = driver.find_element_by_name('passwd')
 
#選擇我的圖書館,點(diǎn)擊后才能看到輸入賬號(hào)密碼
click_first = driver.find_element_by_xpath("//ul[@id='imgmenu']/li[4]")
click_first.click()
elem_user.send_keys('S315080092')
elem_psw.send_keys('xxxxxxxx')
 
#點(diǎn)擊登錄
click_second = driver.find_element_by_name('submit')
click_second.click()
 
time.sleep(5)
#登陸后選擇
click_third = driver.find_element_by_xpath("//*[@id='mainbox']/div/div/ul/li/a")
click_third.click()
 
time.sleep(5)#搜索結(jié)果頁(yè)面停留片刻
#driver.save_screenshot('C:\Users\MrLevo\image.jpg')
 
driver.close()
driver.quit()

 最后

(雖然我知道以后肯定會(huì)再補(bǔ)充):斷斷續(xù)續(xù)差不多兩天時(shí)間來實(shí)現(xiàn)這個(gè)操作,雖然對(duì)大家來說應(yīng)該不算難,但是對(duì)自己還是有蠻大提升的,對(duì)selenium有了基本的概念和操作,對(duì)PIL也進(jìn)行了使用,還有ocr的調(diào)用,雖然調(diào)用firefox來執(zhí)行操作表面上看起來很酷炫,但是執(zhí)行效率和占用內(nèi)存是很大的內(nèi)傷,但作為可視化的模擬瀏覽器登錄,這點(diǎn)做的還是十分絢麗的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/mrlevo520/article/details/51901579

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99久久爱| 亚洲一区二区在线视频 | 一级片欧美 | 亚洲欧美日韩国产综合精品二区 | 久久一区 | 99r在线 | 欧美精品成人 | 久久精品中文字幕 | 国产综合久久久 | 欧美一级免费看 | 欧美日韩三区 | 日韩一区二区视频在线 | 黄色av免费在线观看 | 综合伊人久久 | 亚洲色图二区 | 免费的黄视频 | 成人免费一区二区三区视频网站 | 中文字幕一区二区在线观看 | 日本一区二区高清不卡 | 亚洲一区二区三区久久久 | 免费观看av大片 | 久久午夜精品 | 免费一级视频在线观看 | 日日干狠狠干 | 黄色网页在线 | 在线欧美亚洲 | 亚洲精品一区二三区不卡 | 国产精品久久久久久久浪潮网站 | 成人欧美一区二区三区白人 | 高清一区二区三区 | 狠狠淫| 国产亚洲欧美一区二区 | 玖玖久久 | 国产精品视频一区二区三区不卡 | 一区二区日韩 | 国产成人精品久久二区二区91 | 天天亚洲综合 | 国产精品久久久久久久一区探花 | 久草热8精品视频在线观看 久久亚洲精品中文字幕 | 日韩一区免费在线观看 | 国产精品久久久久国产a级 九九在线精品视频 |