亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

拉萨市| 武汉市| 屯留县| 永新县| 滕州市| 北安市| 樟树市| 平山县| 财经| 罗山县| 廊坊市| 吉隆县| 南部县| 罗田县| 裕民县| 郯城县| 望城县| 尼木县| 台东县| 任丘市| 资阳市| 巴中市| 绥宁县| 监利县| 缙云县| 永嘉县| 阜新| 札达县| 南乐县| 布拖县| 淮滨县| 荔波县| 霍山县| 离岛区| 大埔县| 东港市| 寿阳县| 来宾市| 镇沅| 信丰县| 茂名市|