這篇文章主要介紹“Python爬蟲怎么破解滑塊驗證碼”,在日常操作中,相信很多人在Python爬蟲怎么破解滑塊驗證碼問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python爬蟲怎么破解滑塊驗證碼”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)服務(wù)項目包括通州網(wǎng)站建設(shè)、通州網(wǎng)站制作、通州網(wǎng)頁制作以及通州網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,通州網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到通州省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1、啟動selenium,獲取驗證碼圖片,方便查看預(yù)覽
from selenium import webdriver import time import base64 from PIL import Image from io import BytesIO from selenium.webdriver.support.ui import WebDriverWait def checkVeriImage(driver): # 等待畫布加載完畢 WebDriverWait(driver, 5).until( lambda driver: driver.find_element_by_css_selector('.geetest_canvas_bg.geetest_absolute')) time.sleep(1) # 獲取有缺口的圖片 im_info = driver.execute_script( 'return document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].toDataURL("image/png");') # 得到base64編碼的圖片信息 im_base64 = im_info.split(',')[1] # 轉(zhuǎn)為bytes類型 im_bytes = base64.b64decode(im_base64) with open('./tempbg.png', 'wb') as f: # 保存圖片到本地,方便查看預(yù)覽 f.write(im_bytes) image_data = BytesIO(im_bytes) bgImage = Image.open(image_data) # 計算offsetx的長度 offsetX = VerifyImageUtil().getVerticalLineOffsetX(bgImage) # 獲取滑塊按鈕 eleDrag = driver.find_element_by_css_selector(".geetest_slider_button") action_chains = webdriver.ActionChains(driver) # 拖動滑塊按鈕,注意滑塊距離左邊有 5~10 像素左右誤差 action_chains.drag_and_drop_by_offset(eleDrag,offsetX-10,0).perform()
2、修正拖動滑塊動作太快的問題。
使用 action_chains.move_by_offset(10,0)
action_chains = webdriver.ActionChains(self.driver) # 點擊,準備拖拽 action_chains.click_and_hold(source) action_chains.pause(0.2) action_chains.move_by_offset(targetOffsetX-10,0) action_chains.pause(0.6) action_chains.move_by_offset(10,0) action_chains.pause(0.6) action_chains.release() action_chains.perform()
3、也可以進行拖拽間隔時間和拖拽次數(shù)、距離的隨機化
def simulateDragX(self, source, targetOffsetX): """ 模仿人的拖拽動作:快速沿著X軸拖動(存在誤差),再暫停,然后修正誤差 防止被檢測為機器人,出現(xiàn)“圖片被怪物吃掉了”等驗證失敗的情況 :param source:要拖拽的html元素 :param targetOffsetX: 拖拽目標x軸距離 :return: None """ action_chains = webdriver.ActionChains(self.driver) # 點擊,準備拖拽 action_chains.click_and_hold(source) # 拖動次數(shù),二到三次 dragCount = random.randint(2, 3) if dragCount == 2: # 總誤差值 sumOffsetx = random.randint(-15, 15) action_chains.move_by_offset(targetOffsetX + sumOffsetx, 0) # 暫停一會 action_chains.pause(self.__getRadomPauseScondes()) # 修正誤差,防止被檢測為機器人,出現(xiàn)圖片被怪物吃掉了等驗證失敗的情況 action_chains.move_by_offset(-sumOffsetx, 0) elif dragCount == 3: # 總誤差值 sumOffsetx = random.randint(-15, 15) action_chains.move_by_offset(targetOffsetX + sumOffsetx, 0) # 暫停一會 action_chains.pause(self.__getRadomPauseScondes()) # 已修正誤差的和 fixedOffsetX = 0 # 第一次修正誤差 if sumOffsetx < 0: offsetx = random.randint(sumOffsetx, 0) else: offsetx = random.randint(0, sumOffsetx) fixedOffsetX = fixedOffsetX + offsetx action_chains.move_by_offset(-offsetx, 0) action_chains.pause(self.__getRadomPauseScondes()) # 最后一次修正誤差 action_chains.move_by_offset(-sumOffsetx + fixedOffsetX, 0) action_chains.pause(self.__getRadomPauseScondes()) else: raise Exception("莫不是系統(tǒng)出現(xiàn)了問題?!") action_chains.release().perform()
到此,關(guān)于“Python爬蟲怎么破解滑塊驗證碼”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享題目:Python爬蟲怎么破解滑塊驗證碼
標題網(wǎng)址:http://weahome.cn/article/pcjopo.html