标签:log browser 14.3 .text JD int 5.7 对比 and
获取验证码图片
识别缺口位置
生成滑块拖动路径
模拟实现滑块拼合
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$
标签:log browser 14.3 .text JD int 5.7 对比 and
原文地址:https://www.cnblogs.com/wanglinjie/p/9195208.html