geetest拼图破解:

1、考虑到每个网站的拼图数量很少,可以先把他们下下来,后面在通过RGB来判断差异,来找出需要移动到的位置

2、通过python + selenium来控制页面的操控页面的元素,是的拼图可以被移动

3、这里先直接贴上一段代码:

鸣谢:https://blog.csdn.net/qq_38685503/article/details/81187105

 from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time, random, os
from PIL import Image base_url = "http://www.gsxt.gov.cn"
img_paths = "E:/DateSet/geetest/gsxt"
img_path = 'E:\DateSet\geetest\wait\quekou.png'
img_check_now = 'E:\DateSet\geetest\enter\check_now.png'
img_check = 'E:\DateSet\geetest\enter\check.png'
img_result = 'E:/DateSet/geetest/result/result.png'
js = "var q=document.documentElement.scrollTop=180" # 访问国家企业信用信息公示系统
driver = webdriver.Chrome()
# driver.implicitly_wait(40)
driver.get(base_url)
driver.maximize_window() # 判断元素是否存在,通过ID查询
def is_exist_by_id(element):
try:
driver.find_element_by_id(element)
return True
except:
return False # 判断元素是否存在,通过Class查询
def is_exist_by_class(element):
try:
driver.find_element_by_class_name(element)
return True
except:
return False # 判断元素是否存在,通过xpath查询
def is_exist_by_xpath(element):
try:
driver.find_element_by_xpath(element)
return True
except:
return False while True:
if is_exist_by_id("keyword") and is_exist_by_id("keyword"):
break
time.sleep(0.5) driver.find_element_by_id("keyword").clear()
driver.find_element_by_id("keyword").send_keys("腾讯")
time.sleep(1)
driver.find_element_by_id("btn_query").click()
time.sleep(1) # 得到滑动小块在最右边的截图
while True:
if is_exist_by_class("geetest_slider_button"):
break
time.sleep(0.5)
slide_block = driver.find_element_by_class_name('geetest_slider_button')
ActionChains(driver).click_and_hold(slide_block).perform()
ActionChains(driver).move_by_offset(xoffset=200, yoffset=0).perform()
driver.save_screenshot(img_path) # 得到匹配的原图
def match_source(image):
img_list = []
file_dir = os.listdir(img_paths)
for file_name in file_dir:
file_path_temp = img_paths + '\\' + file_name
img_list.append(Image.open(file_path_temp))
# pingtu 557 * 176
pixel_image = image.getpixel((557, 176))
for img in img_list:
# source 557 * 290
pixel_img = img.getpixel((557, 290))
if abs(pixel_image[0] - pixel_img[0]) < 5:
return img
return image # 判断是否是相似的位置
def is_similar(source_img, quekou_img, x, y):
pixel1 = source_img.getpixel((x, y + 114))
pixel2 = quekou_img.getpixel((x, y))
if abs(pixel1[0] - pixel2[0]) >= 70 and abs(pixel1[1] - pixel2[1]) >= 70 and abs(pixel1[2] - pixel2[2]) >= 70:
return False
return True # 计算滑块位移距离
def get_diff_location(source_img, quekou_img):
for i in range(536, 803):
for j in range(164, 333):
if not is_similar(source_img, quekou_img, i, j):
return i
return -1 #滑块移动轨迹
def get_track(distance):
track = [distance]
# current = 0
# mid = distance * 7 / 8
# t = random.randint(2, 3) / 10
# v = 0
# while current < distance:
# if current < mid:
# a = 2
# else:
# a = -3
# v0 = v
# v = v0 + a * t
# move = v0 * t + 1 / 2 * a * t * t
# current += move
# track.append(round(move))
return track ActionChains(driver).release(slide_block).perform()
quekou_img = Image.open(img_path)
source_img = match_source(quekou_img) # h_dis distance to left
h_dis = get_diff_location(source_img, quekou_img) # 模拟人工移动
def imitate(distance):
track_list = get_track(distance)
time.sleep(2)
ActionChains(driver).click_and_hold(slide_block).perform()
time.sleep(0.02)
for track in track_list:
ActionChains(driver).move_by_offset(xoffset=track, yoffset=0).perform()
imitate = ActionChains(driver).move_by_offset(xoffset=-1, yoffset=0)
time.sleep(0.015)
imitate.perform()
time.sleep(random.randint(5, 6)/10)
imitate.perform()
time.sleep(0.04)
imitate.perform()
time.sleep(0.012)
ActionChains(driver).move_by_offset(xoffset=1, yoffset=0).perform()
ActionChains(driver).pause(random.randint(1, 2)/10).release(slide_block).perform()
time.sleep(2) imitate(h_dis - 552)
while True:
if is_exist_by_xpath("//*[@id='advs']/div/div[2]/a[1]"):
break
time.sleep(0.5) # 通过xpath定位到第一条信息
driver.find_element_by_xpath("//*[@id='advs']/div/div[2]/a[1]").click()
# time.sleep(7) windows = driver.window_handles
driver.switch_to.window(windows[-1])
driver.execute_script(js)
driver.save_screenshot(img_result) # driver.close()

geetest拼图破解的更多相关文章

  1. 爬虫进阶教程:极验(GEETEST)验证码破解教程

    摘要 爬虫最大的敌人之一是什么?没错,验证码!Geetest作为提供验证码服务的行家,市场占有率还是蛮高的.遇到Geetest提供的滑动验证码怎么破?授人予鱼不如授人予渔,接下来就为大家呈现本教程的精 ...

  2. 4.使用Redis+Flask维护动态代理池

    1.为什么使用代理池 许多⽹网站有专⻔门的反爬⾍虫措施,可能遇到封IP等问题. 互联⽹网上公开了了⼤大量量免费代理理,利利⽤用好资源. 通过定时的检测维护同样可以得到多个可⽤用代理理. 2.代理池的要 ...

  3. python3 破解 geetest(极验)的滑块验证码

    Kernel_wu 快速学习的实践者 python3 破解 geetest(极验)的滑块验证码 from selenium import webdriver from selenium.webdriv ...

  4. 破解极验(geetest)验证码

      破解极验(geetest)验证码 这是两年前的帖子: http://www.v2ex.com/t/138479 一个月前的破解程序,我没用过 asp.net ,不知道是不是真的破解了, demo ...

  5. Geetest 极验验证 验证图片拼图

    今天要求做一个跟魅族官网登陆的一个验证效果一样的界面 是一个拖动滑动图片进行拼图 那个效果看着很好,刚开始拿到不知道好不好做 从网上搜资料发现这是一种“极验验证码” 让用户通过滑动拼图来进行验证. 网 ...

  6. selenium+java破解极验滑动验证码

    摘要 分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码. 人工验证的过程 打开威锋网注册页面(https://passport.feng.com/?r=user/r ...

  7. selenium+java破解极验滑动验证码的示例代码

    转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085  ...

  8. 极验3.0滑动拼图验证的使用--java

    [ 前言: 在登录其他网站的时候,看到有个滑动拼图的验证觉得挺好玩的,以前做一个图片验证的小demo,现在发现很多网站都开始流行滑动拼图的验证了,今天也想自己动手来弄一个. 废话不多说,开始撸起来! ...

  9. 使用Python + Selenium破解滑块验证码

    在前面一篇博客<使用 Python + Selenium 打造浏览器爬虫>中,我介绍了 Selenium 的基本用法和爬虫开发过程中经常使用的一些小技巧,利用这些写出一个浏览器爬虫已经完全 ...

随机推荐

  1. vc++中字符串的免杀

    一:格式字符: http://baike.baidu.com/view/2194593.htm d:以十进制形式输出带符号整数(正数不输出符号)o:以八进制形式输出无符号整数(不输出前缀o)x:以十六 ...

  2. HTTPS 验证访问略记

    背景 互联网刚刚兴起的时候,网络安全并没有被很好的重视.HTTP 是明文传输的,这为意图谋不道德之事者提供了诸多的便利.当越来越多的人利益受到侵害的时候,开始重视网络传输的安全问题了. HTTPS 加 ...

  3. [Luogu2824] [HEOI2016/TJOI2016]排序

    题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行 ...

  4. python学习-文件I/O

    12.2使用os.path操作目录 # os.path_test.py import os import time print(os.path.abspath("abc.txt") ...

  5. 如何把应用程序移植到k8s

    程序部署环境的容器化已经是大势所趋,微服务为容器化提供了广阔的应用舞台,k8s已经把Docker纳入为它的底层支撑容器引擎,一统江湖,成为了容器技术事实上的标准.一般的应用程序是不能直接拿来部署到容器 ...

  6. restapi(8)- restapi-sql:用户自主的服务

    学习函数式编程初衷是看到自己熟悉的oop编程语言和sql数据库在现代商业社会中前景暗淡,准备完全放弃windows技术栈转到分布式大数据技术领域的.但是在现实中理想总是不如人意,本来想在一个规模较小的 ...

  7. <Machine Learning - 李宏毅> 学习笔记

    <Machine Learning - 李宏毅> 学习笔记 b站视频地址:李宏毅2019国语 第一章 机器学习介绍 Hand crafted rules Machine learning ...

  8. StopWatch任务计时器

    介   绍: StopWatch 是用来计算程序块的执行时间工具, 目前有好多框架都有实现提供此工具(实现结果都区别不大), 本文介绍org.springframework.util.StopWatc ...

  9. Hystrix dashboard - Unable to connect to Command Metric Stream.

    在使用boot 2.0.*以上版本 + cloud Finchley.RELEASE 查看仪表盘的时候会报错 Unable to connect to Command Metric Stream &l ...

  10. numpy+pandas+ matplotlib模块(day18)

    目录 numpy模块 二维数组 numpy数组的属性 T 数组的装置 dtype 数组元素的数据类型 size 数组元素的个数 ndim 数组的维数 shape数组的维度大小 astype 类型转换 ...