【試驗(yàn)】python+selenium+tesseract破解驗(yàn)證碼

前期安裝:
1、python3
2蠢沿、Pillow
3荧止、pytesseract
pip/pip3 install pytesseract
4、tesseract-ocr 下載地址

前期配置:

  1. 添加環(huán)境變量: TESSDATA_PREFIX = C:\Program Files (x86)\Tesseract-OCR
  2. 編輯文件 D:\Python35\Lib\site-packages\pytesseract\pytesseract.py骤星,
    將 tesseract_cmd = 'tesseract' =>
    改為 tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'

    查找方式:在腳本中import pytesseract
驗(yàn)證tesseract:

輸入命令:tesseract screenImg.png screenImg -l eng
官方資料
解決使用過程中的bug

selenium腳本
#!/usr/local/bin/python3
# -*- coding: UTF-8 -*-

__author__ = 'Alina'

from selenium import webdriver
import time,os
import pytesseract
from PIL import Image,ImageEnhance
from selenium.webdriver.support.ui import WebDriverWait
from pathlib import Path

usernameValue = "tester"
# 驗(yàn)證碼圖片保存地址
screenImg1 = r"/Users/Alina/Documents/shopXOTest/screenImg1.png"
screenImg2 = r"/Users/Alina/Documents/shopXOTest/screenImg2.png"

# tesseract存放位置
pytesseract.pytesseract.tesseract_cmd = r'/Users/Alina/Documents/shopXOTest/tesseract'
# 添加路徑
os.environ['TESSDATA_PREFIX'] = r'/Users/Alina/Documents/shopXOTest'

scrpath = "/Users/Alina/Documents/shopXOTest"
if Path(scrpath).is_dir():  #判斷文件夾路徑是否已經(jīng)存在
    pass
else:
    Path(scrpath).mkdir()   #如果不存在经瓷,創(chuàng)建文件夾

browser = webdriver.Chrome()
browser.get('https://demo.shopxo.net/')
browser.refresh()
browser.set_window_size(1200, 800)

# 關(guān)閉廣告
adEle = WebDriverWait(browser,10).until(lambda browser:browser.find_element_by_css_selector("a.am-close.am-close-alt.am-close-spin.am-icon-times.am-fr.submit-ajax"))
adEle.click()

# 點(diǎn)擊注冊(cè)
regEle = WebDriverWait(browser,10).until(lambda browser:browser.find_element_by_css_selector("ul.top-nav-left>div>div>a:nth-child(4)"))
# regEle.click()
browser.execute_script("arguments[0].click();", regEle)

# 輸入用戶名
usernameEle = WebDriverWait(browser,10).until(lambda browser:browser.find_element_by_css_selector("body > div.am-g.my-content.user-register-container > div > div > div > div.register-content > div.am-tabs.am-tabs-d2.am-no-layout > div > div.am-tab-panel.am-active > form > div:nth-child(1) > input"))
usernameEle.send_keys(usernameValue)

# 輸入登錄密碼
pwEle = WebDriverWait(browser,10).until(lambda browser:browser.find_element_by_css_selector(".am-form.form-validation-username>div:nth-child(2)>div>input"))
pwEle.send_keys("123456")

# 驗(yàn)證碼
# imgsrc = browser.find_element_by_id("form-verify-img").get_attribute('src')
# if re.match('https://demo.shopxo.net/index/user/userverifyentry/type/images_verify_reg.html', imgsrc):
#   print("需要驗(yàn)證碼")
# else:
#   print("不需要驗(yàn)證碼")

location = browser.find_element_by_css_selector('.am-form.form-validation-username>div:nth-child(3)>div>span>span>img').location
size = browser.find_element_by_css_selector('.am-form.form-validation-username>div:nth-child(3)>div>span>span>img').size
# top = location['y'] + 170

#將頁(yè)面滾動(dòng)條拖到能展示驗(yàn)證碼的位置
js="var q=document.documentElement.scrollTop=170"
# browser.execute_script(js)
browser.save_screenshot(screenImg1)
#定位驗(yàn)證碼位置及大小
# location = browser.find_element_by_css_selector('.am-form.form-validation-username>div:nth-child(3)>div>span>span>img').location
print(location)
# size = browser.find_element_by_css_selector('.am-form.form-validation-username>div:nth-child(3)>div>span>span>img').size
print(size)
left = location['x']
top = location['y']
right = location['x'] + size['width']
bottom = location['y'] + size['height']
# #瀏覽器頁(yè)面截屏
# browser.get_screenshot_as_file(screenImg)
#從文件讀取截圖爆哑,截取驗(yàn)證碼位置再次保存
img = Image.open(screenImg1).crop((left,top,right,bottom))
img = img.convert('L')   #轉(zhuǎn)換模式:L | RGB
img = ImageEnhance.Contrast(img)#增強(qiáng)對(duì)比度
img = img.enhance(2.0)   #增加飽和度
img.save(screenImg2)

#再次讀取識(shí)別驗(yàn)證碼
print("識(shí)別出的結(jié)果如下:")
img = Image.open(screenImg2)
code = pytesseract.image_to_string(img)
print(code)

#code= pytesser.image_file_to_string(screenImg)
browser.find_element_by_css_selector(".am-form.form-validation-username>div:nth-child(3)>div>input").send_keys(code.strip())
print(code.strip())

# 勾選同意
browser.find_element_by_css_selector("form.am-form.form-validation-username>div:nth-child(4)>label>span>i:nth-child(2)").click()

# 點(diǎn)擊【注冊(cè)】
browser.find_element_by_css_selector("form.am-form.form-validation-username>div:nth-child(5)>button").click()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舆吮,隨后出現(xiàn)的幾起案子揭朝,更是在濱河造成了極大的恐慌,老刑警劉巖色冀,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潭袱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡锋恬,警方通過查閱死者的電腦和手機(jī)屯换,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來与学,“玉大人彤悔,你說我怎么就攤上這事∷魇兀” “怎么了晕窑?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)卵佛。 經(jīng)常有香客問我杨赤,道長(zhǎng)敞斋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任疾牲,我火速辦了婚禮植捎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘说敏。我一直安慰自己鸥跟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布盔沫。 她就那樣靜靜地躺著医咨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪架诞。 梳的紋絲不亂的頭發(fā)上拟淮,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音谴忧,去河邊找鬼很泊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沾谓,可吹牛的內(nèi)容都是我干的委造。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼均驶,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼昏兆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起爬虱,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腾它,失蹤者是張志新(化名)和其女友劉穎瞒滴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虏两,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碘举,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年引颈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凌停。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡罚拟,死狀恐怖完箩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阻逮,我是刑警寧澤叔扼,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布瓜富,位于F島的核電站降盹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仅胞。R本人自食惡果不足惜剑辫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挠将。 院中可真熱鬧舔稀,春花似錦、人聲如沸产园。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至乘陪,卻和暖如春雕擂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谣拣。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工森缠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贵涵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拴还,于是被迫代替她去往敵國(guó)和親片林。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容