selenium模板实现实现滑动验证

1心得体会

之前还没有听说过selenium模板,现在发现这个模板挺牛逼的。能自动模拟用户操作浏览器,不过缺点就是慢了写,但是不需要自己写cookie、headers这些了,毕竟是用真实的浏览器去模板。主要是好不是很熟练,还需要多敲代码。

2、selenium介绍

selenium是一款自动化测试工具,支持很多主流的浏览器。只要浏览器安装了依赖驱动就行。

下面代码是模拟访问百度操作

1 from selenium import webdriver
2 driver = webdriver.Chrome()
3 driver.get("https://www.baidu.com")

只需简单的代码就可以让浏览器自己访问百度了。当然,这只是简单的操作。

对于用来操作来说,还有输入内容和点击这两个常用的功能

test = driver.find_element_by_xpath(xpath)这个语句可以根据xpath来找到相应的位置.

如果可以点击的话,test.click()  就会自己点击。

如果是需要输入内容的话,test.send_keys()

3.模拟登陆 https://dig.chouti.com并点赞

1、先配置驱动

1 # 配置驱动
2 option = webdriver.ChromeOptions()
3 # driver = webdriver.Chrome(‘/Users/wupeiqi/drivers/chromedriver‘, chrome_options=option)
4 driver = webdriver.Chrome( chrome_options=option)

2、找到登陆按钮并点击

1 # 1. 控制浏览器打开指定页面
2 driver.get("https://dig.chouti.com")
3
4
5 # 2. 找到登录按钮
6 btn_login = driver.find_element_by_xpath(‘//*[@id="login-link-a"]‘)
7 # 3. 点击按钮
8 btn_login.click()

3、输入账号和密码

1 # 4. 找到手机标签
2 input_user = driver.find_element_by_xpath(‘//*[@id="mobile"]‘)
3 # 5. 找到密码标签
4 input_pwd = driver.find_element_by_xpath(‘//*[@id="mbpwd"]‘)
5
6 # 6. 输入用户名
7 input_user.send_keys(‘18879970712‘)
8 # 7. 输入密码
9 input_pwd.send_keys(‘lg970712‘)

4、点击登陆按钮

1 # 8. 点击登录按钮
2 input_submit = driver.find_element_by_xpath(
3     ‘//*[@id="footer-band"]/div[5]/div/div/div[1]/div[2]/div[4]/div[2]/div/span[1]‘)
4 input_submit.click()

5、找到要点赞的新闻并点赞

1 # 9. 点击跳转
2 news = driver.find_element_by_xpath(‘//*[@id="newsContent20696066"]/div[2]/a[1]‘)
3 news.click()
4 driver.execute_script("arguments[0].click();", news)

6、最后关闭驱动

1 # 10.关闭浏览器
2 driver.close()

4、滑动验证

实现滑动验证之前的步骤和前面的一样。登陆网站,找到输入账号和密码的位置输入账号和密码。不过验证的时候就需要滑动验证的,这就需要处理图片了。滑动验证一开始有一张完整的图片,将完整的图片下载下来,然后还有一张不完整的图片,也下载下来。我们需要做的就是对比着两张图片哪里的像素不同,根据不同像素的位置来计算需要滑动多少像素,然后去模拟浏览器去滑动。

完整代码如下:

  1 from selenium import webdriver
  2 from selenium.webdriver import ActionChains
  3 from selenium.webdriver.common.by import By
  4 from selenium.webdriver.common.keys import Keys
  5 from selenium.webdriver.support import expected_conditions as EC
  6 from selenium.webdriver.support.wait import WebDriverWait
  7 import os
  8 import shutil
  9 from PIL import Image
 10 import time
 11
 12
 13 def get_snap(driver):
 14     driver.save_screenshot(‘full_snap.png‘)
 15     page_snap_obj = Image.open(‘full_snap.png‘)
 16
 17     return page_snap_obj
 18
 19
 20 def get_image(driver):
 21     img = driver.find_element_by_class_name(‘geetest_canvas_img‘)
 22     time.sleep(2)
 23     location = img.location
 24     size = img.size
 25
 26     left = location[‘x‘]
 27     top = location[‘y‘]
 28     right = left + size[‘width‘]
 29     bottom = top + size[‘height‘]
 30
 31     page_snap_obj = get_snap(driver)
 32
 33     image_obj = page_snap_obj.crop((left, top, right, bottom))
 34     # image_obj.show()
 35     with open(‘code.png‘, ‘wb‘) as f:
 36         image_obj.save(f, format=‘png‘)
 37     return image_obj
 38
 39
 40 def get_distance(image1, image2):
 41     # start = 0
 42     # threhold = 70
 43     # for i in range(start, image1.size[0]):
 44     #     for j in range(0, image1.size[1]):
 45     #         rgb1 = image1.load()[i, j]
 46     #         rgb2 = image2.load()[i, j]
 47     #         res1 = abs(rgb1[0] - rgb2[0])
 48     #         res2 = abs(rgb1[1] - rgb2[1])
 49     #         res3 = abs(rgb1[2] - rgb2[2])
 50     #         # print(res1,res2,res3)
 51     #         if not (res1 < threhold and res2 < threhold and res3 < threhold):
 52     #             print(111111, i, j)
 53     #             return i - 13
 54     # print(2222, i, j)
 55     # return i - 13
 56     start = 0
 57     threhold = 70
 58     v = []
 59     for i in range(start, image1.size[0]):
 60         for j in range(0, image1.size[1]):
 61             rgb1 = image1.load()[i, j]
 62             rgb2 = image2.load()[i, j]
 63             res1 = abs(rgb1[0] - rgb2[0])
 64             res2 = abs(rgb1[1] - rgb2[1])
 65             res3 = abs(rgb1[2] - rgb2[2])
 66
 67             if not (res1 < threhold and res2 < threhold and res3 < threhold):
 68                 print(i)
 69                 if i not in v:
 70                     v.append(i)
 71
 72     stop = 0
 73     for i in range(0, len(v)):
 74         val = i + v[0]
 75         if v[i] != val:
 76             stop = v[i]
 77             break
 78
 79     width = stop - v[0]
 80     print(stop, v[0], width)
 81     return width
 82
 83
 84 def get_tracks(distance):
 85     import random
 86     exceed_distance = random.randint(0, 5)
 87     distance += exceed_distance  # 先滑过一点,最后再反着滑动回来
 88     v = 0
 89     t = 0.2
 90     forward_tracks = []
 91
 92     current = 0
 93     mid = distance * 3 / 5
 94     while current < distance:
 95         if current < mid:
 96             a = random.randint(1, 3)
 97         else:
 98             a = random.randint(1, 3)
 99             a = -a
100         s = v * t + 0.5 * a * (t ** 2)
101         v = v + a * t
102         current += s
103         forward_tracks.append(round(s))
104
105     # 反着滑动到准确位置
106     v = 0
107     t = 0.2
108     back_tracks = []
109
110     current = 0
111     mid = distance * 4 / 5
112     while abs(current) < exceed_distance:
113         if current < mid:
114             a = random.randint(1, 3)
115         else:
116             a = random.randint(-3, -5)
117             a = -a
118         s = -v * t - 0.5 * a * (t ** 2)
119         v = v + a * t
120         current += s
121         back_tracks.append(round(s))
122     return {‘forward_tracks‘: forward_tracks, ‘back_tracks‘: list(reversed(back_tracks))}
123
124
125 def crack(driver):  # 破解滑动认证
126     # 1、点击按钮,得到没有缺口的图片
127     button = driver.find_element_by_xpath(‘//*[@id="embed-captcha"]/div/div[2]/div[1]/div[3]‘)
128     button.click()
129
130     # 2、获取没有缺口的图片
131     image1 = get_image(driver)
132
133     # 3、点击滑动按钮,得到有缺口的图片
134     button = driver.find_element_by_class_name(‘geetest_slider_button‘)
135     button.click()
136
137     # 4、获取有缺口的图片
138     image2 = get_image(driver)
139
140     # 5、对比两种图片的像素点,找出位移
141     distance = get_distance(image1, image2)
142     print(distance)
143     #
144     # 6、模拟人的行为习惯,根据总位移得到行为轨迹
145     tracks = get_tracks(int(distance / 2))
146
147     # 7、按照行动轨迹先正向滑动,后反滑动
148     button = driver.find_element_by_class_name(‘geetest_slider_button‘)
149     ActionChains(driver).click_and_hold(button).perform()
150
151     # 正常人类总是自信满满地开始正向滑动,自信地表现是疯狂加速
152     for track in tracks[‘forward_tracks‘]:
153         ActionChains(driver).move_by_offset(xoffset=track, yoffset=0).perform()
154
155     # 结果傻逼了,正常的人类停顿了一下,回过神来发现,卧槽,滑过了,然后开始反向滑动
156     time.sleep(0.5)
157     for back_track in tracks[‘back_tracks‘]:
158         ActionChains(driver).move_by_offset(xoffset=back_track, yoffset=0).perform()
159     #
160     # # 小范围震荡一下,进一步迷惑极验后台,这一步可以极大地提高成功率
161     ActionChains(driver).move_by_offset(xoffset=3, yoffset=0).perform()
162     ActionChains(driver).move_by_offset(xoffset=-3, yoffset=0).perform()
163
164     # # 成功后,骚包人类总喜欢默默地欣赏一下自己拼图的成果,然后恋恋不舍地松开那只脏手
165     time.sleep(0.5)
166     ActionChains(driver).release().perform()
167
168
169 def login_luffy(username, password):
170     driver = webdriver.Chrome()
171     driver.set_window_size(960, 800)
172     try:
173         # 1、输入账号密码回车
174         driver.implicitly_wait(3)
175         driver.get(‘https://www.luffycity.com/login‘)
176         input_username = driver.find_element_by_xpath(‘//*[@id="router-view"]/div/div/div[2]/div[2]/input[1]‘)
177         input_pwd = driver.find_element_by_xpath(‘//*[@id="router-view"]/div/div/div[2]/div[2]/input[2]‘)
178
179         input_username.send_keys(username)
180         input_pwd.send_keys(password)
181
182         # 2、破解滑动认证
183         crack(driver)
184
185         time.sleep(10)  # 睡时间长一点,确定登录成功
186     finally:
187         pass
188         # driver.close()
189
190
191 if __name__ == ‘__main__‘:
192     login_luffy(username=‘wupeiqi‘, password=‘123123123‘)

破解滑动验证

原文地址:https://www.cnblogs.com/xingkongyihao/p/9280983.html

时间: 2024-08-02 08:23:20

selenium模板实现实现滑动验证的相关文章

C# Selenium 破解腾讯滑动验证

什么是Selenium? WebDriver是主流Web应用自动化测试框架,具有清晰面向对象 API,能以最佳的方式与浏览器进行交互. 支持的浏览器: Mozilla Firefox Google Chrome Microsoft Internet Explorer Opera Safari Apple iPhone Android browsers 具体学习相关的地址: 简书:https://www.jianshu.com/search?q=c%23%20Selenium&page=1&

滑动验证

代码 from selenium import webdriver # 用来驱动浏览器的 from selenium.webdriver import ActionChains # 破解滑动验证码的时候用的 可以拖动图片 import time from PIL import Image import random option = webdriver.ChromeOptions() option.add_argument('disable-infobars') driver = webdriv

图片滑动验证的实现

有时候在页面登录或者注册的时候,为了防止不是机器人操作,会让用户手动来滑动图片验证.我在做项目时用到了这个功能,这里记录一下自己的想法和做法. 实现的效果如图所示: 好了,现在来说说想法. 关于图片滑动验证一般是要前后端来交互的.首先是要后台处理好图片,然后将处理出来的图片返回到前台.后台随机抽取一张模板图片,也就是完整的图片,然后通过代码来操作将一块区域的图扣出来,将扣掉的地方填成灰色或者黑色,这样,素材就有了. 在返回到前台时,要将图片转码为base编码.在前台接收时,要使用如下方式来讲ba

Android基础控件——SeekBar的使用、仿淘宝滑动验证

学习,学习,学以致用 SeekBar是一个拖动条控件,最简单的案例就是我们的调节音量,还有音频视频的播放,传统的SeekBar样式,如图 传统的实现太简单,不足以让我们到能装逼的地步.本来是打算实现滴滴出行滑动完成订单的效果,可惜找不到效果图,今天也就用淘宝的滑动验证来作为实例 SeekBar:使用progressDrawable属性自定义SeekBar 拖动块:使用thumb属性更改,其实就是一张图片 文字:使用RelativeLayout嵌套在一起 其效果是 android:max:设置进度

Spring Boot 整合滑动验证

极验是一种利用生物特征与人工智能技术解决人机交互安全问题的技术,旨在解决安全验证问题,例如:账号登录.短信验证.批量注册等,目前极验.网易易盾比较出众. 在这里主要使用的极验Geetest和springboot 框架整合. 1.首先到极验官网注册账号获取ID和KEY,这里赘述. 2.到极验官网下载,使用SDK,点击下载,如果你使用时Git工具, #git clone https://github.com/GeeTeam/gt3-java-sdk.git 3.引入SDK到Springboot项目中

前端滑动验证+拼图滑动验证效果

相信大家都玩过B站,B站在登陆的时候有个拼图滑动验证,今天就整合一下前端实现的滑动验证 拖动滑动验证(无背景图片) <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>拖动滑块验证</title> </head> <bod

selenium处理极验滑动验证码

要爬取一个网站遇到了极验的验证码,这周都在想着怎么破解这个,网上搜了好多知乎上看到有人问了这问题https://www.zhihu.com/question/28833985,我按照这思路去大概实现了一下. 1.使用htmlunit(这种方式我没成功,模拟鼠标拖拽后轨迹没生成,可以跳过) 我用的是java,我首先先想到了用直接用htmlunit,我做了点初始化 private void initWebClient() { if (webClient != null) { return; } we

selenium自动化测试之测试结果验证

1.实际测试过程中,常常要对比实际结果与期望结果是否一致.2.如果实际结果与期望结果不一致则被认为bug selenium广泛应用于B/S架构,如何通过selenium来验证测试结果的正确性呢. 案例分析:以百度为例,一起来看看如何验证测试结果的正确性. 点击百度首页的"hao123"后: 跳转至"hao123"页面 验证:是否跳转至"hao123"页面 如何通过selenium实现该场景呢? #****************** # 获取验证

Django中使用geetest实现滑动验证

下载第三方模块 导入模块social-auth-app-django 和geetest 提前去官网下载gt.js或者引入http://static.geetest.com/static/tools/gt.js pip install social-auth-app-django pip install geetest 在django引用 1.目录结构 2.html层 <!DOCTYPE html> <html lang="en"> <head> &l