您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python爬蟲怎么破解滑塊驗證碼”,在日常操作中,相信很多人在Python爬蟲怎么破解滑塊驗證碼問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python爬蟲怎么破解滑塊驗證碼”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1、啟動selenium,獲取驗證碼圖片,方便查看預覽
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] # 轉為bytes類型 im_bytes = base64.b64decode(im_base64) with open('./tempbg.png', 'wb') as f: # 保存圖片到本地,方便查看預覽 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、也可以進行拖拽間隔時間和拖拽次數、距離的隨機化
def simulateDragX(self, source, targetOffsetX): """ 模仿人的拖拽動作:快速沿著X軸拖動(存在誤差),再暫停,然后修正誤差 防止被檢測為機器人,出現“圖片被怪物吃掉了”等驗證失敗的情況 :param source:要拖拽的html元素 :param targetOffsetX: 拖拽目標x軸距離 :return: None """ action_chains = webdriver.ActionChains(self.driver) # 點擊,準備拖拽 action_chains.click_and_hold(source) # 拖動次數,二到三次 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()) # 修正誤差,防止被檢測為機器人,出現圖片被怪物吃掉了等驗證失敗的情況 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("莫不是系統出現了問題?!") action_chains.release().perform()
到此,關于“Python爬蟲怎么破解滑塊驗證碼”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。