極驗滑動驗證碼的識別


獲取驗證碼圖片

識別缺口位置

生成滑塊拖動路徑

模擬實現滑塊拼合

 

  1 import time
  2 from io import BytesIO
  3 from PIL import Image
  4 from selenium import webdriver
  5 from selenium.webdriver import ActionChains
  6 from selenium.webdriver.common.by import By
  7 from selenium.webdriver.support.ui import WebDriverWait
  8 from selenium.webdriver.support import expected_conditions as EC
  9 
 10 EMAIL = '1764662628@qq.com'
 11 PASSWORD = '***'
 12 BORDER = 6
 13 INIT_LEFT = 60
 14 
 15 
 16 class CrackGeetest():
 17     def __init__(self):
 18         self.url = 'https://account.geetest.com/login'
 19         self.browser = webdriver.Chrome()
 20         self.wait = WebDriverWait(self.browser, 20)
 21         self.email = EMAIL
 22         self.password = PASSWORD
 23     
 24     def __del__(self):
 25         self.browser.close()
 26     
 27     def get_geetest_button(self):
 28         """
 29         獲取初始驗證按鈕
 30         :return:
 31         """
 32         button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_radar_tip')))
 33         return button
 34     
 35     def get_position(self):
 36         """
 37         獲取驗證碼位置
 38         :return: 驗證碼位置元組
 39         """
 40         img = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_canvas_img')))
 41         time.sleep(2)
 42         location = img.location
 43         size = img.size
 44         top, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size[
 45             'width']
 46         return (top, bottom, left, right)
 47     
 48     def get_screenshot(self):
 49         """
 50         獲取網頁截圖
 51         :return: 截圖對象
 52         """
 53         screenshot = self.browser.get_screenshot_as_png()
 54         screenshot = Image.open(BytesIO(screenshot))
 55         return screenshot
 56     
 57     def get_slider(self):
 58         """
 59         獲取滑塊
 60         :return: 滑塊對象
 61         """
 62         slider = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_slider_button')))
 63         return slider
 64     
 65     def get_geetest_image(self, name='captcha.png'):
 66         """
 67         獲取驗證碼圖片
 68         :return: 圖片對象
 69         """
 70         top, bottom, left, right = self.get_position()
 71         print('驗證碼位置', top, bottom, left, right)
 72         screenshot = self.get_screenshot()
 73         captcha = screenshot.crop((left, top, right, bottom))
 74         captcha.save(name)
 75         return captcha
 76     
 77     def open(self):
 78         """
 79         打開網頁輸入用戶名密碼
 80         :return: None
 81         """
 82         self.browser.get(self.url)
 83         email = self.wait.until(EC.presence_of_element_located((By.ID, 'email')))
 84         password = self.wait.until(EC.presence_of_element_located((By.ID, 'password')))
 85         email.send_keys(self.email)
 86         password.send_keys(self.password)
 87     
 88     def get_gap(self, image1, image2):
 89         """
 90         獲取缺口偏移量
 91         :param image1: 不帶缺口圖片
 92         :param image2: 帶缺口圖片
 93         :return:
 94         """
 95         left = 60
 96         for i in range(left, image1.size[0]):
 97             for j in range(image1.size[1]):
 98                 if not self.is_pixel_equal(image1, image2, i, j):
 99                     left = i
100                     return left
101         return left
102     
103     def is_pixel_equal(self, image1, image2, x, y):
104         """
105         判斷兩個像素是否相同
106         :param image1: 圖片1
107         :param image2: 圖片2
108         :param x: 位置x
109         :param y: 位置y
110         :return: 像素是否相同
111         """
112         # 取兩個圖片的像素點
113         pixel1 = image1.load()[x, y]
114         pixel2 = image2.load()[x, y]
115         threshold = 60
116         if abs(pixel1[0] - pixel2[0]) < threshold and abs(pixel1[1] - pixel2[1]) < threshold and abs(
117                 pixel1[2] - pixel2[2]) < threshold:
118             return True
119         else:
120             return False
121     
122     def get_track(self, distance):
123         """
124         根據偏移量獲取移動軌跡
125         :param distance: 偏移量
126         :return: 移動軌跡
127         """
128         # 移動軌跡
129         track = []
130         # 當前位移
131         current = 0
132         # 減速閾值
133         mid = distance * 4 / 5
134         # 計算間隔
135         t = 0.2
136         # 初速度
137         v = 0
138         
139         while current < distance:
140             if current < mid:
141                 # 加速度為正2
142                 a = 2
143             else:
144                 # 加速度為負3
145                 a = -3
146             # 初速度v0
147             v0 = v
148             # 當前速度v = v0 + at
149             v = v0 + a * t
150             # 移動距離x = v0t + 1/2 * a * t^2
151             move = v0 * t + 1 / 2 * a * t * t
152             # 當前位移
153             current += move
154             # 加入軌跡
155             track.append(round(move))
156         return track
157     
158     def move_to_gap(self, slider, track):
159         """
160         拖動滑塊到缺口處
161         :param slider: 滑塊
162         :param track: 軌跡
163         :return:
164         """
165         ActionChains(self.browser).click_and_hold(slider).perform()
166         for x in track:
167             ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform()
168         time.sleep(0.5)
169         ActionChains(self.browser).release().perform()
170     
171     def login(self):
172         """
173         登錄
174         :return: None
175         """
176         submit = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'login-btn')))
177         submit.click()
178         time.sleep(10)
179         print('登錄成功')
180     
181     def crack(self):
182         # 輸入用戶名密碼
183         self.open()
184         # 點擊驗證按鈕
185         button = self.get_geetest_button()
186         button.click()
187         # 獲取驗證碼圖片
188         image1 = self.get_geetest_image('captcha1.png')
189         # 點按呼出缺口
190         slider = self.get_slider()
191         slider.click()
192         # 獲取帶缺口的驗證碼圖片
193         image2 = self.get_geetest_image('captcha2.png')
194         # 獲取缺口位置
195         gap = self.get_gap(image1, image2)
196         print('缺口位置', gap)
197         # 減去缺口位移
198         gap -= BORDER
199         # 獲取移動軌跡
200         track = self.get_track(gap)
201         print('滑動軌跡', track)
202         # 拖動滑塊
203         self.move_to_gap(slider, track)
204         
205         success = self.wait.until(
206             EC.text_to_be_present_in_element((By.CLASS_NAME, 'geetest_success_radar_tip_content'), '驗證成功'))
207         print(success)
208         
209         # 失敗后重試
210         if not success:
211             self.crack()
212         else:
213             self.login()
214 
215 
216 if __name__ == '__main__':
217     crack = CrackGeetest()
218     crack.crack()

 

估計是高分屏的原因,截全圖下來的時候我用畫圖軟件看了圖形驗證碼的像素位置,剛好是給的位置參數乘以2,所以保存下來的2張驗證碼的圖還要壓縮一下分辨率,加入下面語句就可以做對比匹配了。

1 captcha = screenshot.crop((2*left, 2*top, 2*right, 2*bottom))
2 size = 258,159
3 captcha.thumbnail(size)

 

修改參數

  1 import time
  2 from io import BytesIO
  3 from PIL import Image
  4 from selenium import webdriver
  5 from selenium.webdriver import ActionChains
  6 from selenium.webdriver.common.by import By
  7 from selenium.webdriver.support.ui import WebDriverWait
  8 from selenium.webdriver.support import expected_conditions as EC
  9 
 10 EMAIL = '1764662628@qq.com'
 11 PASSWORD = '***'
 12 BORDER = 6
 13 INIT_LEFT = 60
 14 
 15 
 16 class CrackGeetest():
 17     def __init__(self):
 18         self.url = 'https://account.geetest.com/login'
 19         self.browser = webdriver.Chrome()
 20         self.wait = WebDriverWait(self.browser, 20)
 21         self.email = EMAIL
 22         self.password = PASSWORD
 23     
 24     def __del__(self):
 25         self.browser.close()
 26     
 27     def get_geetest_button(self):
 28         """
 29         獲取初始驗證按鈕
 30         :return:
 31         """
 32         button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_radar_tip')))
 33         return button
 34     
 35     def get_position(self):
 36         """
 37         獲取驗證碼位置
 38         :return: 驗證碼位置元組
 39         """
 40         img = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_canvas_img')))
 41         time.sleep(2)
 42         location = img.location
 43         size = img.size
 44         top, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size[
 45             'width']
 46         return (top, bottom, left, right)
 47     
 48     def get_screenshot(self):
 49         """
 50         獲取網頁截圖
 51         :return: 截圖對象
 52         """
 53         screenshot = self.browser.get_screenshot_as_png()
 54         screenshot = Image.open(BytesIO(screenshot))
 55         return screenshot
 56     
 57     def get_slider(self):
 58         """
 59         獲取滑塊
 60         :return: 滑塊對象
 61         """
 62         slider = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_slider_button')))
 63         return slider
 64     
 65     def get_geetest_image(self, name='captcha.png'):
 66         """
 67         獲取驗證碼圖片
 68         :return: 圖片對象
 69         """
 70         top, bottom, left, right = self.get_position()
 71         print('驗證碼位置', top, bottom, left, right)
 72         screenshot = self.get_screenshot()
 73         #captcha = screenshot.crop((left, top, right, bottom))
 74         captcha = screenshot.crop((2*left, 2*top, 2*right, 2*bottom))
 75         size = 258,159
 76         captcha.thumbnail(size)
 77         captcha.save(name)
 78         return captcha
 79     
 80     def open(self):
 81         """
 82         打開網頁輸入用戶名密碼
 83         :return: None
 84         """
 85         self.browser.get(self.url)
 86         email = self.wait.until(EC.presence_of_element_located((By.ID, 'email')))
 87         password = self.wait.until(EC.presence_of_element_located((By.ID, 'password')))
 88         email.send_keys(self.email)
 89         password.send_keys(self.password)
 90     
 91     def get_gap(self, image1, image2):
 92         """
 93         獲取缺口偏移量
 94         :param image1: 不帶缺口圖片
 95         :param image2: 帶缺口圖片
 96         :return:
 97         """
 98         left = 60
 99         for i in range(left, image1.size[0]):
100             for j in range(image1.size[1]):
101                 if not self.is_pixel_equal(image1, image2, i, j):
102                     left = i
103                     return left
104         return left
105     
106     def is_pixel_equal(self, image1, image2, x, y):
107         """
108         判斷兩個像素是否相同
109         :param image1: 圖片1
110         :param image2: 圖片2
111         :param x: 位置x
112         :param y: 位置y
113         :return: 像素是否相同
114         """
115         # 取兩個圖片的像素點
116         pixel1 = image1.load()[x, y]
117         pixel2 = image2.load()[x, y]
118         threshold = 60
119         if abs(pixel1[0] - pixel2[0]) < threshold and abs(pixel1[1] - pixel2[1]) < threshold and abs(
120                 pixel1[2] - pixel2[2]) < threshold:
121             return True
122         else:
123             return False
124     
125     def get_track(self, distance):
126         """
127         根據偏移量獲取移動軌跡
128         :param distance: 偏移量
129         :return: 移動軌跡
130         """
131         # 移動軌跡
132         track = []
133         # 當前位移
134         current = 0
135         # 減速閾值
136         mid = distance * 4 / 5
137         print("距離")
138         print(distance)
139         print(mid)
140         # 計算間隔
141         t = 0.1
142         # 初速度
143         v = 0
144         
145         while current < distance:
146             if current < mid:
147                 # 加速度為正2
148                 a = 2
149             else:
150                 # 加速度為負3
151                 a = -3
152             # 初速度v0
153             v0 = v
154             print("速度")
155             print(v)
156             # 當前速度v = v0 + at
157             v = v0 + a * t
158             # 移動距離x = v0t + 1/2 * a * t^2
159             move = v0 * t + 1 / 2 * a * t * t
160             print("移動距離")
161             print(move)
162             # 當前位移
163             current += move
164             print("當前位移")
165             print(current)
166             # 加入軌跡
167             track.append(round(move))
168         return track
169     
170     def move_to_gap(self, slider, track):
171         """
172         拖動滑塊到缺口處
173         :param slider: 滑塊
174         :param track: 軌跡
175         :return:
176         """
177         ActionChains(self.browser).click_and_hold(slider).perform()
178         for x in track:
179             ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform()
180         time.sleep(0.5)
181         ActionChains(self.browser).release().perform()
182     
183     def login(self):
184         """
185         登錄
186         :return: None
187         """
188         submit = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'login-btn')))
189         submit.click()
190         time.sleep(10)
191         print('登錄成功')
192     
193     def crack(self):
194         # 輸入用戶名密碼
195         self.open()
196         # 點擊驗證按鈕
197         button = self.get_geetest_button()
198         button.click()
199         # 獲取驗證碼圖片
200         image1 = self.get_geetest_image('captcha1.png')
201         # 點按呼出缺口
202         slider = self.get_slider()
203         slider.click()
204         # 獲取帶缺口的驗證碼圖片
205         image2 = self.get_geetest_image('captcha2.png')
206         # 獲取缺口位置
207         gap = self.get_gap(image1, image2)
208         print('缺口位置', gap)
209         # 減去缺口位移
210         gap -= BORDER
211         # 獲取移動軌跡
212         track = self.get_track(gap)
213         print('滑動軌跡', track)
214         # 拖動滑塊
215         self.move_to_gap(slider, track)
216         
217         success = self.wait.until(
218             EC.text_to_be_present_in_element((By.CLASS_NAME, 'geetest_success_radar_tip_content'), '驗證成功'))
219         print(success)
220         
221         # 失敗后重試
222         if not success:
223             self.crack()
224         else:
225             self.login()
226 
227 
228 if __name__ == '__main__':
229     crack = CrackGeetest()
230     crack.crack()

結果輸出:

  1 wljdeMacBook-Pro:Desktop wlj$ python3 CrackGeetest.py
  2 驗證碼位置 172 331 528 786
  3 驗證碼位置 172 331 528 786
  4 缺口位置 94
  5 距離
  6 88
  7 70.4
  8 速度
  9 0
 10 移動距離
 11 0.010000000000000002
 12 當前位移
 13 0.010000000000000002
 14 速度
 15 0.2
 16 移動距離
 17 0.030000000000000006
 18 當前位移
 19 0.04000000000000001
 20 速度
 21 0.4
 22 移動距離
 23 0.05000000000000001
 24 當前位移
 25 0.09000000000000002
 26 速度
 27 0.6000000000000001
 28 移動距離
 29 0.07
 30 當前位移
 31 0.16000000000000003
 32 速度
 33 0.8
 34 移動距離
 35 0.09000000000000002
 36 當前位移
 37 0.25000000000000006
 38 速度
 39 1.0
 40 移動距離
 41 0.11000000000000001
 42 當前位移
 43 0.3600000000000001
 44 速度
 45 1.2
 46 移動距離
 47 0.13
 48 當前位移
 49 0.4900000000000001
 50 速度
 51 1.4
 52 移動距離
 53 0.15
 54 當前位移
 55 0.6400000000000001
 56 速度
 57 1.5999999999999999
 58 移動距離
 59 0.17
 60 當前位移
 61 0.8100000000000002
 62 速度
 63 1.7999999999999998
 64 移動距離
 65 0.19
 66 當前位移
 67 1.0000000000000002
 68 速度
 69 1.9999999999999998
 70 移動距離
 71 0.21
 72 當前位移
 73 1.2100000000000002
 74 速度
 75 2.1999999999999997
 76 移動距離
 77 0.22999999999999998
 78 當前位移
 79 1.4400000000000002
 80 速度
 81 2.4
 82 移動距離
 83 0.25
 84 當前位移
 85 1.6900000000000002
 86 速度
 87 2.6
 88 移動距離
 89 0.27
 90 當前位移
 91 1.9600000000000002
 92 速度
 93 2.8000000000000003
 94 移動距離
 95 0.29000000000000004
 96 當前位移
 97 2.25
 98 速度
 99 3.0000000000000004
100 移動距離
101 0.31000000000000005
102 當前位移
103 2.56
104 速度
105 3.2000000000000006
106 移動距離
107 0.33000000000000007
108 當前位移
109 2.89
110 速度
111 3.400000000000001
112 移動距離
113 0.3500000000000001
114 當前位移
115 3.24
116 速度
117 3.600000000000001
118 移動距離
119 0.3700000000000001
120 當前位移
121 3.6100000000000003
122 速度
123 3.800000000000001
124 移動距離
125 0.3900000000000001
126 當前位移
127 4.0
128 速度
129 4.000000000000001
130 移動距離
131 0.41000000000000014
132 當前位移
133 4.41
134 速度
135 4.200000000000001
136 移動距離
137 0.43000000000000016
138 當前位移
139 4.84
140 速度
141 4.400000000000001
142 移動距離
143 0.4500000000000002
144 當前位移
145 5.29
146 速度
147 4.600000000000001
148 移動距離
149 0.4700000000000002
150 當前位移
151 5.76
152 速度
153 4.800000000000002
154 移動距離
155 0.4900000000000002
156 當前位移
157 6.25
158 速度
159 5.000000000000002
160 移動距離
161 0.5100000000000002
162 當前位移
163 6.76
164 速度
165 5.200000000000002
166 移動距離
167 0.5300000000000002
168 當前位移
169 7.29
170 速度
171 5.400000000000002
172 移動距離
173 0.5500000000000003
174 當前位移
175 7.84
176 速度
177 5.600000000000002
178 移動距離
179 0.5700000000000003
180 當前位移
181 8.41
182 速度
183 5.8000000000000025
184 移動距離
185 0.5900000000000003
186 當前位移
187 9.0
188 速度
189 6.000000000000003
190 移動距離
191 0.6100000000000003
192 當前位移
193 9.61
194 速度
195 6.200000000000003
196 移動距離
197 0.6300000000000003
198 當前位移
199 10.24
200 速度
201 6.400000000000003
202 移動距離
203 0.6500000000000004
204 當前位移
205 10.89
206 速度
207 6.600000000000003
208 移動距離
209 0.6700000000000004
210 當前位移
211 11.56
212 速度
213 6.800000000000003
214 移動距離
215 0.6900000000000004
216 當前位移
217 12.25
218 速度
219 7.0000000000000036
220 移動距離
221 0.7100000000000004
222 當前位移
223 12.96
224 速度
225 7.200000000000004
226 移動距離
227 0.7300000000000004
228 當前位移
229 13.690000000000001
230 速度
231 7.400000000000004
232 移動距離
233 0.7500000000000004
234 當前位移
235 14.440000000000001
236 速度
237 7.600000000000004
238 移動距離
239 0.7700000000000005
240 當前位移
241 15.21
242 速度
243 7.800000000000004
244 移動距離
245 0.7900000000000005
246 當前位移
247 16.0
248 速度
249 8.000000000000004
250 移動距離
251 0.8100000000000004
252 當前位移
253 16.81
254 速度
255 8.200000000000003
256 移動距離
257 0.8300000000000003
258 當前位移
259 17.64
260 速度
261 8.400000000000002
262 移動距離
263 0.8500000000000003
264 當前位移
265 18.490000000000002
266 速度
267 8.600000000000001
268 移動距離
269 0.8700000000000002
270 當前位移
271 19.360000000000003
272 速度
273 8.8
274 移動距離
275 0.8900000000000001
276 當前位移
277 20.250000000000004
278 速度
279 9.0
280 移動距離
281 0.91
282 當前位移
283 21.160000000000004
284 速度
285 9.2
286 移動距離
287 0.9299999999999999
288 當前位移
289 22.090000000000003
290 速度
291 9.399999999999999
292 移動距離
293 0.95
294 當前位移
295 23.040000000000003
296 速度
297 9.599999999999998
298 移動距離
299 0.9699999999999999
300 當前位移
301 24.01
302 速度
303 9.799999999999997
304 移動距離
305 0.9899999999999998
306 當前位移
307 25.0
308 速度
309 9.999999999999996
310 移動距離
311 1.0099999999999996
312 當前位移
313 26.009999999999998
314 速度
315 10.199999999999996
316 移動距離
317 1.0299999999999996
318 當前位移
319 27.04
320 速度
321 10.399999999999995
322 移動距離
323 1.0499999999999996
324 當前位移
325 28.09
326 速度
327 10.599999999999994
328 移動距離
329 1.0699999999999994
330 當前位移
331 29.16
332 速度
333 10.799999999999994
334 移動距離
335 1.0899999999999994
336 當前位移
337 30.25
338 速度
339 10.999999999999993
340 移動距離
341 1.1099999999999994
342 當前位移
343 31.36
344 速度
345 11.199999999999992
346 移動距離
347 1.1299999999999992
348 當前位移
349 32.49
350 速度
351 11.399999999999991
352 移動距離
353 1.1499999999999992
354 當前位移
355 33.64
356 速度
357 11.59999999999999
358 移動距離
359 1.169999999999999
360 當前位移
361 34.81
362 速度
363 11.79999999999999
364 移動距離
365 1.189999999999999
366 當前位移
367 36.0
368 速度
369 11.99999999999999
370 移動距離
371 1.209999999999999
372 當前位移
373 37.21
374 速度
375 12.199999999999989
376 移動距離
377 1.2299999999999989
378 當前位移
379 38.44
380 速度
381 12.399999999999988
382 移動距離
383 1.249999999999999
384 當前位移
385 39.69
386 速度
387 12.599999999999987
388 移動距離
389 1.269999999999999
390 當前位移
391 40.959999999999994
392 速度
393 12.799999999999986
394 移動距離
395 1.2899999999999987
396 當前位移
397 42.24999999999999
398 速度
399 12.999999999999986
400 移動距離
401 1.3099999999999987
402 當前位移
403 43.55999999999999
404 速度
405 13.199999999999985
406 移動距離
407 1.3299999999999985
408 當前位移
409 44.889999999999986
410 速度
411 13.399999999999984
412 移動距離
413 1.3499999999999985
414 當前位移
415 46.23999999999999
416 速度
417 13.599999999999984
418 移動距離
419 1.3699999999999986
420 當前位移
421 47.609999999999985
422 速度
423 13.799999999999983
424 移動距離
425 1.3899999999999983
426 當前位移
427 48.999999999999986
428 速度
429 13.999999999999982
430 移動距離
431 1.4099999999999984
432 當前位移
433 50.40999999999998
434 速度
435 14.199999999999982
436 移動距離
437 1.4299999999999982
438 當前位移
439 51.83999999999998
440 速度
441 14.39999999999998
442 移動距離
443 1.4499999999999982
444 當前位移
445 53.28999999999998
446 速度
447 14.59999999999998
448 移動距離
449 1.4699999999999982
450 當前位移
451 54.75999999999998
452 速度
453 14.79999999999998
454 移動距離
455 1.489999999999998
456 當前位移
457 56.24999999999997
458 速度
459 14.999999999999979
460 移動距離
461 1.509999999999998
462 當前位移
463 57.75999999999997
464 速度
465 15.199999999999978
466 移動距離
467 1.5299999999999978
468 當前位移
469 59.28999999999997
470 速度
471 15.399999999999977
472 移動距離
473 1.5499999999999978
474 當前位移
475 60.83999999999997
476 速度
477 15.599999999999977
478 移動距離
479 1.5699999999999978
480 當前位移
481 62.40999999999997
482 速度
483 15.799999999999976
484 移動距離
485 1.5899999999999976
486 當前位移
487 63.999999999999964
488 速度
489 15.999999999999975
490 移動距離
491 1.6099999999999977
492 當前位移
493 65.60999999999996
494 速度
495 16.199999999999974
496 移動距離
497 1.6299999999999975
498 當前位移
499 67.23999999999995
500 速度
501 16.399999999999974
502 移動距離
503 1.6499999999999975
504 當前位移
505 68.88999999999994
506 速度
507 16.599999999999973
508 移動距離
509 1.6699999999999975
510 當前位移
511 70.55999999999995
512 速度
513 16.799999999999972
514 移動距離
515 1.6649999999999974
516 當前位移
517 72.22499999999994
518 速度
519 16.49999999999997
520 移動距離
521 1.6349999999999973
522 當前位移
523 73.85999999999993
524 速度
525 16.19999999999997
526 移動距離
527 1.6049999999999973
528 當前位移
529 75.46499999999993
530 速度
531 15.89999999999997
532 移動距離
533 1.5749999999999973
534 當前位移
535 77.03999999999994
536 速度
537 15.59999999999997
538 移動距離
539 1.544999999999997
540 當前位移
541 78.58499999999994
542 速度
543 15.299999999999969
544 移動距離
545 1.514999999999997
546 當前位移
547 80.09999999999994
548 速度
549 14.999999999999968
550 移動距離
551 1.484999999999997
552 當前位移
553 81.58499999999994
554 速度
555 14.699999999999967
556 移動距離
557 1.454999999999997
558 當前位移
559 83.03999999999994
560 速度
561 14.399999999999967
562 移動距離
563 1.424999999999997
564 當前位移
565 84.46499999999993
566 速度
567 14.099999999999966
568 移動距離
569 1.3949999999999967
570 當前位移
571 85.85999999999993
572 速度
573 13.799999999999965
574 移動距離
575 1.3649999999999967
576 當前位移
577 87.22499999999992
578 速度
579 13.499999999999964
580 移動距離
581 1.3349999999999966
582 當前位移
583 88.55999999999992
584 滑動軌跡 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1]
585 True
586 登錄成功
587 wljdeMacBook-Pro:Desktop wlj$ 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM