滑块识别
1. 获取图片
测试网站:https://www.geetest.com/adaptive-captcha-demo
2. 点击滑块拼图并开始验证
# 1.打开首页driver.get('https://www.geetest.com/adaptive-captcha-demo')# 2.点击【滑动拼图验证】tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.XPATH,'//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[3]'))tag.click()# 3.点击开始验证tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.CLASS_NAME,'geetest_btn_click'))tag.click()
3. 获取背景图片与缺口图片
# 4.读取背景图片def fetch_bg_func(dv):tag_object = dv.find_element(By.CLASS_NAME,'geetest_bg')style_string = tag_object.get_attribute("style")match_list = re.findall('url\(\"(.*)\"\);', style_string)# ["http..." ]if match_list:return match_list[0]bg_image_url = WebDriverWait(driver, 30, 0.5).until(fetch_bg_func)# 新的函数 = 某个函数('geetest_bg')print("背景图:", bg_image_url)# 5.读取缺口图片def fetch_slice_func(dv):tag_object = dv.find_element(By.CLASS_NAME,'geetest_slice_bg')style_string = tag_object.get_attribute("style")match_list = re.findall('url\(\"(.*)\"\);', style_string)if match_list:return match_list[0] slice_image_url = WebDriverWait(driver, 30, 0.5).until(fetch_slice_func)# 新的函数 = 某个函数('geetest_slice_bg')print("缺口图:", slice_image_url)
4. 识别图片
背景图: https://static.geetest.com/captcha_v4/e70fbf1d77/slide/491f18e9b8/2022-04-21T09/bg/031bfe44f51149da9e7adbecfbdac599.png
缺口图: https://static.geetest.com/captcha_v4/e70fbf1d77/slide/491f18e9b8/2022-04-21T09/slice/031bfe44f51149da9e7adbecfbdac599.png
4.1 ddddocr
import ddddocrimport requestsslice_bytes = requests.get(slice_image_url).contentbg_bytes = requests.get(bg_image_url).contentslide = ddddocr.DdddOcr(det=False, ocr=False,show_ad=False)# det=False:表示不进行文本检测。ocr=False:表示不进行文本识别。show_ad=False:表示不显示广告。res = slide.slide_match(slice_bytes, bg_bytes, simple_target=True)x1, y1, x2, y2 = res['target']print(x1, y1, x2, y2)# 196 12 276 92
4.2 打码平台
网址:http://www.ttshitu.com/
import base64import requestsbg_bytes = requests.get(bg_image_url).contentb64_string = base64.b64encode(bg_bytes).decode('utf-8')data = {"username": "自己的用户名", "password": "自己的密码", "typeid": 33, "image": b64_string}res = requests.post("http://api.ttshitu.com/predict", json=data)data_dict = res.json()distance = data_dict['data'] # 只返回横坐标print(distance)# {'result': '173', 'id': 't0pNdrJjTCmXScFtGRofaw'}
5. Selenium滑动
from selenium.webdriver import ActionChainstag = driver.find_element(By.CLASS_NAME, 'geetest_btn')time.sleep(2)ActionChains(driver).click_and_hold(tag).perform()# 点击并抓住标签ActionChains(driver).move_by_offset(xoffset=x1, yoffset=0).perform()# 向右滑动114像素(向左是负数)ActionChains(driver).release().perform()# 释放time.sleep(3)
6. 完整代码
import reimport timeimport ddddocrimport requestsfrom selenium import webdriverfrom selenium.webdriver import ActionChainsfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.wait import WebDriverWaitdriver = webdriver.Edge()# 1.打开首页driver.get('https://www.geetest.com/adaptive-captcha-demo')# 2.点击【滑动拼图验证】tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.XPATH,'//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[3]'))tag.click()# 3.点击开始验证tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.CLASS_NAME,'geetest_btn_click'))tag.click()# 4.读取背景图片def fetch_bg_func(dv):tag_object = dv.find_element(By.CLASS_NAME,'geetest_bg')style_string = tag_object.get_attribute("style")match_list = re.findall('url\(\"(.*)\"\);', style_string)# ["http..." ] if match_list:return match_list[0]bg_image_url = WebDriverWait(driver, 30, 0.5).until(fetch_bg_func)# 新的函数 = 某个函数('geetest_bg')print("背景图:", bg_image_url)# 4.读取缺口图片def fetch_slice_func(dv):tag_object = dv.find_element(By.CLASS_NAME,'geetest_slice_bg')style_string = tag_object.get_attribute("style")match_list = re.findall('url\(\"(.*)\"\);', style_string)if match_list:return match_list[0]slice_image_url = WebDriverWait(driver, 30, 0.5).until(fetch_slice_func)# 新的函数 = 某个函数('geetest_slice_bg')print("缺口图:", slice_image_url)# 5.识别图片坐标slice_bytes = requests.get(slice_image_url).contentbg_bytes = requests.get(bg_image_url).contentslide = ddddocr.DdddOcr(det=False, ocr=False,show_ad=False)# det=False:表示不进行文本检测。ocr=False:表示不进行文本识别。show_ad=False:表示不显示广告。res = slide.slide_match(slice_bytes, bg_bytes, simple_target=True)x1, y1, x2, y2 = res['target']print(x1, y1, x2, y2)# 196 12 276 92# 6.滑动滑块tag = driver.find_element(By.CLASS_NAME, 'geetest_btn')time.sleep(2)ActionChains(driver).click_and_hold(tag).perform()# 点击并抓住标签ActionChains(driver).move_by_offset(xoffset=x1, yoffset=0).perform()# 向右滑动114像素(向左是负数)ActionChains(driver).release().perform()# 释放time.sleep(3)