from selenium import webdriver
from selenium.webdriver import ActionChains
from PIL import Image
import time def get_snap(driver):
driver.save_screenshot('snap.png')
snap_obj=Image.open('snap.png')
return snap_obj def get_image(driver):
img=driver.find_element_by_class_name('geetest_canvas_img')
time.sleep(2) #等待图片加载完毕
size=img.size
location=img.location left=location['x']
top=location['y']
right=left+size['width']
bottom=top+size['height'] snap_obj=get_snap(driver)
image_obj=snap_obj.crop((left,top,right,bottom))
# image_obj.show()
return image_obj def get_distance(image1,image2):
start_x=58
threhold=60
# print(image1.size)
# print(image2.size)
for x in range(start_x,image1.size[0]):
for y in range(image1.size[1]):
rgb1=image1.load()[x,y]
rgb2=image2.load()[x,y]
res1=abs(rgb1[0]-rgb2[0])
res2=abs(rgb1[1]-rgb2[1])
res3=abs(rgb1[2]-rgb2[2])
if not (res1 < threhold and res2 < threhold and res3 < threhold):
return x-7 def get_tracks(distance):
distance+=20
#s=v*t+0.5*a*(t**2) v0=0
s=0
t=0.5
mid=distance*3/5
forward_tracks=[] while s < distance:
if s < mid:
a=2
else:
a=-3 v=v0
track=v*t+0.2*a*(t**2)
track=round(track)
v0=v+a*t
s+=track
forward_tracks.append(track)
back_tracks=[-1,-2,-2,-3,-2,-2,-1]
xxx = [-1,-2,-2,-1,-1,-1]#
return {"forward_tracks":forward_tracks,'back_tracks':back_tracks,'xxx':xxx} try:
driver = webdriver.Chrome()
driver.get('https://passport.cnblogs.com/user/signin')
driver.implicitly_wait(3) #1、输入账号、密码,然后点击登陆
input_user=driver.find_element_by_id('input1')
input_pwd=driver.find_element_by_id('input2')
login_button=driver.find_element_by_id('signin') input_user.send_keys('Fugui')
input_pwd.send_keys('xxxx')
login_button.click() #2、点击按钮,弹出没有缺口的图
button=driver.find_element_by_class_name('geetest_radar_tip')
button.click() #3、针对没有缺口的图片进行截图
image1=get_image(driver) #4、点击滑动按钮,弹出有缺口的图
slider_button=driver.find_element_by_class_name('geetest_slider_button')
slider_button.click() #5、针对有缺口的图片进行截图
image2=get_image(driver) #6、对比两张图片,找出缺口,即滑动的位移
distance=get_distance(image1,image2)
# print(distance) #7、按照人的行为行为习惯,把总位移切成一段段小的位移
traks_dic=get_tracks(distance) #8、按照位移移动
slider_button=driver.find_element_by_class_name('geetest_slider_button')
ActionChains(driver).click_and_hold(slider_button).perform()
#先向前移动
forward_tracks=traks_dic["forward_tracks"]
back_tracks=traks_dic["back_tracks"]
xxx=traks_dic["xxx"]
for forward_track in forward_tracks:
ActionChains(driver).move_by_offset(xoffset=forward_track,yoffset=0).perform() #短暂停顿
time.sleep(0.2) # 先向后移动
for back_track in back_tracks:
ActionChains(driver).move_by_offset(xoffset=back_track,yoffset=0).perform() time.sleep(0.3) for xx in xxx:
ActionChains(driver).move_by_offset(xoffset=xx,yoffset=0).perform() ActionChains(driver).move_by_offset(xoffset=-3,yoffset=0).perform()
ActionChains(driver).move_by_offset(xoffset=3,yoffset=0).perform()
time.sleep(0.3)
ActionChains(driver).release().perform()
time.sleep(10)
finally:
driver.quit()

最新文章

  1. Javascript学习记录——原生JS实现旋转木马特效
  2. Web前端技术研究:Css hack技术---令人沮丧的技术
  3. TFS2012 安装 配置笔记
  4. mybatis xml 大于 小于
  5. solr初学
  6. 布局文件预览:Rendering Problems Exception raised during rendering: Unable to find the layout for Action Bar.的解决
  7. 系统级IO实践学习记录
  8. 使用JMeter创建数据库(Mysql)测试
  9. 02.iOS开发网络篇—HTTP协议
  10. javascript异步延时载入及推断是否已载入js/css文件
  11. iOS 推送证书
  12. [转]Traits 编程技法+模板偏特化+template参数推导+内嵌型别编程技巧
  13. System.Diagnostics.Process 执行.EXE
  14. ASP.NET MVC5 中百度ueditor富文本编辑器的使用
  15. 【python教程01】 编辑器
  16. JavaScript 模拟 HashMap例子
  17. bzoj 3816&amp;&amp;uoj #41. [清华集训2014]矩阵变换
  18. 关于UI回调Invoker的实现(二)
  19. 深入理解 JavaScript(五)
  20. 【SQL】- 基础知识梳理(一) - 数据库

热门文章

  1. Beta冲刺——day4
  2. day1——js方法关键字的问题(onclick点了没反应)
  3. maven项目编译运行时提示jdk版本过低问题解决方法
  4. BZOJ 3516 国王奇遇记加强版(乱推)
  5. [国家集训队]middle
  6. Python学习--------------Atm+购物车系统
  7. (转)远程连接webservice遇到无法访问的问题解决办法
  8. 【CC】Batman and Tree
  9. ASP.NET MVC —— Model之一模型模板
  10. 关于Thinkphp5类命名导致的“模块不存在”问题