中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python爬蟲怎么破解滑塊驗證碼

發布時間:2021-08-04 18:12:15 來源:億速云 閱讀:204 作者:chen 欄目:編程語言

這篇文章主要介紹“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爬蟲怎么破解滑塊驗證碼”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌鲁木齐市| 谷城县| 越西县| 连城县| 区。| 扬州市| 咸宁市| 婺源县| 卫辉市| 万安县| 宁国市| 师宗县| 平乐县| 都安| 获嘉县| 新竹市| 宜黄县| 那曲县| 和龙市| 元江| 灵寿县| 祁门县| 浦县| 南溪县| 永福县| 丰都县| 洪湖市| 红原县| 兴国县| 锦州市| 文水县| 洛南县| 姚安县| 伊川县| 铜鼓县| 四平市| 洛扎县| 邹城市| 建德市| 专栏| 团风县|