日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

抖音自动人机拼图验证-selenium+pyautogui+opencv

發布時間:2023/12/20 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抖音自动人机拼图验证-selenium+pyautogui+opencv 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.簡介

  • 平時使用Selenium爬取網頁數據的時候難免會遇到人機驗證,有拼圖、文字、滑動等
  • 本文介紹比較常見的一種滑塊拼圖驗證,利用opencv就可計算出滑塊需要移動的距離
  • 雖然Selenium有自己的鼠標事件,但缺點很大,只能模擬鼠標事件,實際鼠標箭頭是不會動的,比如抖音的滑塊拼圖驗證就監聽了鼠標動作,所以本示例用第三方的pyautogui鼠標事件,可以解決這一問題

二.完整流程

  • 判斷是否出現人機拼圖驗證
  • 獲得滑塊以及滑板圖片地址
  • 下載滑塊以及滑板圖片
  • opencv計算滑塊需要移動距離
  • 校準滑塊移動距離偏移量
  • 獲取滑塊在屏幕中位置
  • 校準滑塊位置
  • 移動滑塊

三.示例程序

from selenium import webdriver import time import requests import cv2 import os import pyautogui as pgyou_url = 'https://www.douyin.com/user/MS4wLjABAAAAGA9bHrExvrQmowuVfRZxjG4s07M7EUjf1PlaHRHqdls' #作者主頁地址 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging'])#獲取驗證圖片url def get_img():data = drive.find_element_by_class_name("captcha_verify_img--wrapper").find_elements_by_tag_name("img")url_a = data[0].get_attribute("src")url_b = data[1].get_attribute("src")return url_a,url_b#下載驗證圖片 def download(path,url):data = requests.get(url).contentwhile True:time.sleep(0.2)if len(data)>5:breakwith open(path,"wb") as f:f.write(data)#圖片去噪 def canny(img):img = cv2.GaussianBlur(img, (3, 3), 0)return cv2.Canny(img, 50, 150)#獲取滑塊移動距離 def distance():img_b = cv2.imread("b.png", 0)img_a = cv2.imread("a.jpeg", 0)img_b = cv2.resize(img_b,(271,271))img_a = cv2.resize(img_a,(1360,848))res = cv2.matchTemplate(canny(img_b), canny(img_a), cv2.TM_CCOEFF_NORMED)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)data = max_loc[0]w, h = img_b.shape[::-1]w1, h1 = img_a.shape[::-1]data += w/2data = (data/w1)*271 #滑塊首尾距離271data += (data-135.5)*0.3 #偏移調整參數0.3 (0.1~0.5)data = round(data,1) #保留一位小數print(data)return data#獲取滑塊位置 def location_hk():rect = drive.find_element_by_class_name("sc-kkGfuU").rect #滑塊相對瀏覽器位置position = drive.get_window_position() #瀏覽器位置x = position['x']+rect['x']+rect['width']/2y = position['y']+rect['y']+rect['height']/2+120 #偏移量(誤差)120return x,y#移動滑塊 def move_hk(x,y,data):pg.moveTo(x,y,1)pg.mouseDown(x,y,button='left')pg.moveTo(x+200,y+1,1)pg.moveTo(x+90,y-1,1)pg.moveTo(x+130,y-3,1)pg.moveTo(x+data,y-1,1.5)pg.mouseUp(x+data,y-1,button='left')#循環測試 while True:drive = webdriver.Chrome(options=options)drive.get(you_url)while True:try:drive.find_element_by_class_name("secsdk-captcha-drag-icon") #判斷是否出現人機拼圖驗證url_a,url_b = get_img()download("a.jpeg",url_a)download("b.png",url_b)data = distance()x,y = location_hk()os.remove("a.jpeg")os.remove("b.png")move_hk(x,y,data)breakexcept:time.sleep(0.5)time.sleep(3)print("開始下一次測試")

四.演示視頻

抖音自動人機拼圖驗證演示

五.注意事項

1.需要的庫文件

from selenium import webdriver import time import requests import cv2 import os import pyautogui as pg

2.相關問題

  • 不同的電腦的屏幕尺寸略微不同,需要手動修改相關參數
  • selenium需搭配chromedriver使用,點擊下載,安裝教程請 百度

3.參考文章

  • 全網最全python庫selenium自動化使用教程
  • Selenium WebDriver(一)
  • pyautogui自動化控制鼠標和鍵盤操作

代碼為原創,只作參考,請勿用于惡意爬蟲,創作不易,多多支持,謝謝!

總結

以上是生活随笔為你收集整理的抖音自动人机拼图验证-selenium+pyautogui+opencv的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。