CrackGeetest icon indicating copy to clipboard operation
CrackGeetest copied to clipboard

获取的图片问题

Open Dongxuxiang1994 opened this issue 7 years ago • 3 comments

没有滑动滑块时,含有缺口的图片就存在,获取的两张图是一样的,无法找出缺口的位置,有没有其他方法获取没有缺口的图片,或者别的方法破解的,求救

Dongxuxiang1994 avatar Dec 25 '18 07:12 Dongxuxiang1994

没有滑动滑块时,含有缺口的图片就存在,获取的两张图是一样的,无法找出缺口的位置,有没有其他方法获取没有缺口的图片,或者别的方法破解的,求救

我也是遇到这个问题,请问解决了吗,能否指教一下

shenzijing avatar Jan 11 '19 01:01 shenzijing

好像要用到js逆向什么的,我也不会,听说崔大的爬虫要出第二版,等等看吧

| | dongxuxiang1994 | | [email protected] | 签名由网易邮箱大师定制 在2019年1月11日 09:19,shenzijing[email protected] 写道:

没有滑动滑块时,含有缺口的图片就存在,获取的两张图是一样的,无法找出缺口的位置,有没有其他方法获取没有缺口的图片,或者别的方法破解的,求救

我也是遇到这个问题,请问解决了吗,能否指教一下

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

Dongxuxiang1994 avatar Jan 14 '19 15:01 Dongxuxiang1994

没有滑动滑块时,含有缺口的图片就存在,获取的两张图是一样的,无法找出缺口的位置,有没有其他方法获取没有缺口的图片,或者别的方法破解的,求救

调用geettest时有3张图片传回来,都是渲染在页面上,例如此网站haodf.com,他在登录检测时用了geetest,我通过xpath找到了它的3个图片,并且层级为:1. 滑块图片> 2. 含有缺口的图片> 3. 完整的图片

slider_img = browser.find_element(By.XPATH, '//*[@class="geetest_canvas_slice geetest_absolute"]').screenshot('slider.png')
gap_img = browser.find_element(By.XPATH, '//*[@class="geetest_canvas_bg geetest_absolute"]').screenshot('gap.png')
full_img = (browser.find_element(By.XPATH, '//*[@class="geetest_canvas_fullbg geetest_fade geetest_absolute"]').screenshot('full.png'))

当然,请注意screenshot的的用法,可能会拍到元素遮挡的图片,需要selenium执行js脚本来去除

browser.execute_script("""
var element = arguments[0];
element.parentNode.removeChild(element);
""", slider_element)

以下是我的获取图片的完整代码

import cv2
import numpy as np
from selenium import webdriver
import os
import time
from PIL import Image, ImageChops
from selenium.webdriver.common.by import By

# chrome_path = 'C:/Program Files/Google/Chrome/Application/chromedriver.exe'
# 1.访问网址
browser = webdriver.Chrome()
url = "https://passport.haodf.com/nusercenter/showlogin"

browser.get(url)  # 访问网址
time.sleep(2)

tel_input = browser.find_element(By.XPATH, '//*[@placeholder="请输入手机号"]')
tel_input.send_keys("13111111111")
# TODO 输入手机号

send_code = browser.find_element(By.XPATH, '//*[@class="sendCode"]')
send_code.click()
# TODO 点击按钮
# TODO 接下来等2秒,就会出现图片验证
print(f"恭喜你到了这一步")
time.sleep(5)

print(f"恭喜你出现了验证")

# TODO 定位到class="geetest_canvas_slice geetest_absolute",然后获取滑块图片
# TODO 定位到class="geetest_canvas_fullbg geetest_fade geetest_absolute",设置style="opacity: 1;",然后获取原始背景图片
# TODO 定位到class="geetest_canvas_bg geetest_absolute",然后获取缺口背景图片

# 3.获取图片(层级:滑块>缺口背景>满背景)
# ------------------删除滑块图片
slider_element = browser.find_element(By.XPATH, '//*[@class="geetest_canvas_slice geetest_absolute"]')
browser.execute_script("""
var element = arguments[0];
element.parentNode.removeChild(element);
""", slider_element)

# ------------------删除缺口图片
gap_img_element = browser.find_element(By.XPATH, '//*[@class="geetest_canvas_bg geetest_absolute"]')
gap_img = gap_img_element.screenshot('gap.png')
browser.execute_script("""
var element = arguments[0];
element.parentNode.removeChild(element);
""", gap_img_element)

# ------------------获取完整图片
# ------------------修改 canvas 元素的 style 属性
result = browser.execute_script("""
var canvasElement = document.querySelector('.geetest_canvas_fullbg.geetest_fade.geetest_absolute');
if (canvasElement) {
    canvasElement.setAttribute('style', 'opacity: 1;');
    return 'set success';
}else {
    return 'style element_not_found';
}
""")
print(f"元素result: {result}")
full_img = (browser.find_element(By.XPATH, '//*[@class="geetest_canvas_fullbg geetest_fade geetest_absolute"]')
            .screenshot('full.png'))

# -----------------TODO 把他们删除的的都加回来
# ------------------添加滑块和缺口图片
browser.execute_script("""
var canvasElement = document.createElement("canvas");
canvasElement.className = "geetest_canvas_bg geetest_absolute";
canvasElement.height = 160;
canvasElement.width = 260;

var targetDiv = document.querySelector('.geetest_slicebg.geetest_absolute');
if (targetDiv) {
    targetDiv.appendChild(canvasElement);
}
""")
browser.execute_script("""
var canvasElement = document.createElement("canvas");
canvasElement.className = "geetest_canvas_slice geetest_absolute";
canvasElement.height = 160;
canvasElement.width = 260;
canvasElement.style = "opacity: 1; display: block"

var targetDiv = document.querySelector('.geetest_slicebg.geetest_absolute');
if (targetDiv) {
    targetDiv.appendChild(canvasElement);
}
""")

yiming-leo avatar Jan 23 '24 04:01 yiming-leo