geetest拼图破解

摘要:
geetest拼图破解:1、考虑到每个网站的拼图数量很少,可以先把他们下下来,后面在通过RGB来判断差异,来找出需要移动到的位置2、通过python+selenium来控制页面的操控页面的元素,是的拼图可以被移动3、这里先直接贴上一段代码:鸣谢:https://blog.csdn.net/qq_38685503/article/details/811871051fromseleniumimport

geetest拼图破解:

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

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

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

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

1 from selenium importwebdriver
2 from selenium.webdriver.common.action_chains importActionChains
3 from selenium.webdriver.support.ui importWebDriverWait
4 from selenium.webdriver.support importexpected_conditions as EC
5 importtime, random, os
6 from PIL importImage
7 
8 base_url = "http://www.gsxt.gov.cn"
9 img_paths = "E:/DateSet/geetest/gsxt"
10 img_path = 'E:DateSetgeetestwaitquekou.png'
11 img_check_now = 'E:DateSetgeetestentercheck_now.png'
12 img_check = 'E:DateSetgeetestentercheck.png'
13 img_result = 'E:/DateSet/geetest/result/result.png'
14 js = "var q=document.documentElement.scrollTop=180"
15 
16 #访问国家企业信用信息公示系统
17 driver =webdriver.Chrome()
18 #driver.implicitly_wait(40)
19 driver.get(base_url)
20 driver.maximize_window()
21 
22 
23 #判断元素是否存在,通过ID查询
24 defis_exist_by_id(element):
25     try:
26 driver.find_element_by_id(element)
27         returnTrue
28     except:
29         returnFalse
30 
31 
32 #判断元素是否存在,通过Class查询
33 defis_exist_by_class(element):
34     try:
35 driver.find_element_by_class_name(element)
36         returnTrue
37     except:
38         returnFalse
39 
40 
41 #判断元素是否存在,通过xpath查询
42 defis_exist_by_xpath(element):
43     try:
44 driver.find_element_by_xpath(element)
45         returnTrue
46     except:
47         returnFalse
48 
49 
50 whileTrue:
51     if is_exist_by_id("keyword") and is_exist_by_id("keyword"):
52         break
53     time.sleep(0.5)
54 
55 driver.find_element_by_id("keyword").clear()
56 driver.find_element_by_id("keyword").send_keys("腾讯")
57 time.sleep(1)
58 driver.find_element_by_id("btn_query").click()
59 time.sleep(1)
60 
61 #得到滑动小块在最右边的截图
62 whileTrue:
63     if is_exist_by_class("geetest_slider_button"):
64         break
65     time.sleep(0.5)
66 slide_block = driver.find_element_by_class_name('geetest_slider_button')
67 ActionChains(driver).click_and_hold(slide_block).perform()
68 ActionChains(driver).move_by_offset(xoffset=200, yoffset=0).perform()
69 driver.save_screenshot(img_path)
70 
71 
72 #得到匹配的原图
73 defmatch_source(image):
74     img_list =[]
75     file_dir =os.listdir(img_paths)
76     for file_name infile_dir:
77         file_path_temp = img_paths + '\' +file_name
78 img_list.append(Image.open(file_path_temp))
79     #pingtu 557 * 176
80     pixel_image = image.getpixel((557, 176))
81     for img inimg_list:
82         #source 557 * 290
83         pixel_img = img.getpixel((557, 290))
84         if abs(pixel_image[0] - pixel_img[0]) < 5:
85             returnimg
86     returnimage
87 
88 
89 #判断是否是相似的位置
90 defis_similar(source_img, quekou_img, x, y):
91     pixel1 = source_img.getpixel((x, y + 114))
92     pixel2 =quekou_img.getpixel((x, y))
93     if abs(pixel1[0] - pixel2[0]) >= 70 and abs(pixel1[1] - pixel2[1]) >= 70 and abs(pixel1[2] - pixel2[2]) >= 70:
94         returnFalse
95     returnTrue
96 
97 
98 #计算滑块位移距离
99 defget_diff_location(source_img, quekou_img):
100     for i in range(536, 803):
101         for j in range(164, 333):
102             if notis_similar(source_img, quekou_img, i, j):
103                 returni
104     return -1
105 
106 
107 #滑块移动轨迹
108 defget_track(distance):
109     track =[distance]
110     #current = 0
111     #mid = distance * 7 / 8
112     #t = random.randint(2, 3) / 10
113     #v = 0
114     #while current < distance:
115     #if current < mid:
116     #a = 2
117     #else:
118     #a = -3
119     #v0 = v
120     #v = v0 + a * t
121     #move = v0 * t + 1 / 2 * a * t * t
122     #current += move
123     #track.append(round(move))
124     returntrack
125 
126 
127 ActionChains(driver).release(slide_block).perform()
128 quekou_img =Image.open(img_path)
129 source_img =match_source(quekou_img)
130 
131 #h_dis distance to left
132 h_dis =get_diff_location(source_img, quekou_img)
133 
134 
135 #模拟人工移动
136 defimitate(distance):
137     track_list =get_track(distance)
138     time.sleep(2)
139 ActionChains(driver).click_and_hold(slide_block).perform()
140     time.sleep(0.02)
141     for track intrack_list:
142         ActionChains(driver).move_by_offset(xoffset=track, yoffset=0).perform()
143     imitate = ActionChains(driver).move_by_offset(xoffset=-1, yoffset=0)
144     time.sleep(0.015)
145 imitate.perform()
146     time.sleep(random.randint(5, 6)/10)
147 imitate.perform()
148     time.sleep(0.04)
149 imitate.perform()
150     time.sleep(0.012)
151     ActionChains(driver).move_by_offset(xoffset=1, yoffset=0).perform()
152     ActionChains(driver).pause(random.randint(1, 2)/10).release(slide_block).perform()
153     time.sleep(2)
154 
155 
156 imitate(h_dis - 552)
157 whileTrue:
158     if is_exist_by_xpath("//*[@id='advs']/div/div[2]/a[1]"):
159         break
160     time.sleep(0.5)
161 
162 #通过xpath定位到第一条信息
163 driver.find_element_by_xpath("//*[@id='advs']/div/div[2]/a[1]").click()
164 #time.sleep(7)
165 
166 
167 windows =driver.window_handles
168 driver.switch_to.window(windows[-1])
169 driver.execute_script(js)
170 driver.save_screenshot(img_result)
171 
172 
173 #driver.close()

免责声明:文章转载自《geetest拼图破解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇几种开源工作流引擎的简单比较FLEX 布局下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

【646】灰度图array转为RGB三通道array

可以使用两种方法:numpy可以通过cv2.cvtColor函数自行实现。灰度图像可以转换为RGB的所谓灰度图像,分成三个通道,这意味着三个通道都是相同的信息,相当于相同维度信息的重复。主要通过numpy实现。阵列,其可以类似于广播的形式实现。...

移动通信网络中的 GTP 协议

在EPSUP中使用GTP的优点之一是GTP具有固有的可识别隧道机制和GTP可以为UE提供的移动性。注意:GTPv2-U协议不存在。GTP-C协议GTP-C是GTP的控制平面,使用UDP端口2123。在EPS中,GTPv2-C协议负责创建、维护和删除S1、S5/S8和其他接口上的GTP-U隧道。它是一种基于IP的隧道协议,允许在GTP UProtocolEnt...

PLSQL操作Oracle创建用户和表(含创建用户名和密码)

1》 打开PLSQL,填写用户名和密码,为数据库选择ORCL2,成功登录后可以在界面顶部看到以下信息system@ORCL这意味着用户系统处于登录状态。菜单栏中的会话可以登录和注销。...

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。108种传感器模块系列实验实验二十六:4X4矩阵键盘模块矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。工作原理矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。矩阵键盘所需库文件在ArduinoIDE1.8.0...

Linux 安装.src.rpm源码包的方法

接下来是rpm安装过程。...

流控制、FlowControl

作用就是防止网络拥堵时导致的“丢包”问题,大致的工作原理就是当链路两端的设备有一端忙不过来了,他会给另外一端的设备发一个暂停发包的命令,通过这种方式来缓解压力,解决丢包问题。看上去流控制应该是个非常好的防止丢包的方法,但是为什么我们还要在无盘上关闭他呢?...