python+phantomjs怎么滑动易小盾的python滑动验证码识别?

相关文章推荐
selenium是很出名的自动化测试工具,多数场景是测试工程师用来做自动化测试,但是同样selenium可以作为基本上模拟浏览器的工具,去爬取一些基于http request不能或者很复杂的才能爬取的...
运行爬虫抓取某些网站的时候,经常会碰到需要登陆验证(输入账号、密码)之后才能获取数据的情况。那么问题来了,如何完成登陆验证呢?下面以itunes为例大概总结两种方法。主要使用工具为python/jav...
我又回来了我。从开学到现在仔细想想干了点啥,嗯。。。。。没啥。一直想着补博客,然后就想着。。刚为祖国大人庆完生,又被老妈拽去地里各种折腾,回来都不想动脑子,不想不想不想,啊。。。。。还是补博客吧,废话...
登录新浪微博最近新浪微博好烦,都取消不了验证码这个难搞得东西,而且跳来跳去,一改版以前的代码就都不能用了。目前整理的资料有三种方法:
1. 设Cookie:简单粗暴,免去了模拟登录的好多麻烦,只是要...
selenium+PhantomJS来做爬虫的话可以做到完全模拟浏览器的操作,就避开的很多后台的通信,过程会简单很多,很多web自动化测试也是用selenium来做的呢,但是这样的缺点就是慢,运行过程...
Python 2.7
IDE Pycharm 5.0.3Selenium:Selenium的介绍及使用,强烈推荐@ Eastmount的博客PIL : Pillow-3.3.0-cp27-cp27m...
1.编译环境
操作系统:win7;语言:python2.7+selenium2;ide:pycharm;浏览器:IE10,chrome
2.1意外开始
今天登录淘宝时候发现吧密码搞忘了,选择找回...
使用自动化工具selenium可以很方便模拟淘宝登录
from selenium import webdriver
driver = webdriver.PhantomJS(executabl...
http://bbs.125.la/thread--1.html
http://bbs.125.la/thread-1...
有如下登录页面:
登录过程中输入账号密码后 需要拉动图中 滑块 后 才可登录成功:
如何使用webdriver 实现拉动滑块的功能?代码如下:
创建公共功能类并加入方法:...
他的最新文章
讲师:Array
讲师:李志伟
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)相关文章推荐
selenium+PhantomJS来做爬虫的话可以做到完全模拟浏览器的操作,就避开的很多后台的通信,过程会简单很多,很多web自动化测试也是用selenium来做的呢,但是这样的缺点就是慢,运行过程...
用到python爬虫时候的网页需要拖动滚动条才能获取下一步操作,网上大多数说的是调用js代码,自己用的不行,不能拖动到页面的最底部。现在上传我自己的代码,供大家相互学习借鉴:
UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等;但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了。
在python中有...
UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等;但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了。
比如下面这样一个网...
一、开发环境:
  1、JDK1.6
  2、Eclipse:Version: Kepler Service Release 1,下载地址:http://www.eclipse.org/downl...
1、安装Java
Java 下载地址:点击打开链接
Java 环境分 JDK 和 JRE ,JDK 就是 Java Development Kit。简单的说 JDK 是面向开发人员使用的SDK,它...
width: 1000
margin: ...
Selenium2+python自动化17-JS处理滚动条
时间: 15:33:00
他的最新文章
讲师:Array
讲师:李志伟
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)滑动验证码破解:Python Selenium 2.0 应用
我的图书馆
滑动验证码破解:Python Selenium 2.0 应用
本文经作者授权发布。本文是作者参加某验证码攻防大赛后的记录,大赛中攻击部分用到了网页自动化测试工具Selenium。本文记录的就是相关的方法。文 | 杨林@Tencent滑动验证码是新型验证码的一种,区别于传统的字符型验证码,新型验证码主要通过用户行为来区分人和机器。selenium 被广泛应用于网页自动化测试以及网页爬虫中,本次比赛我采用了 selenium 操作网页元素的方式来自动执行滑动验证码的拖拽。 selenium 在 python 下的详细使用方法参见&selenium python 使用文档。一、selenium 的配置1)安装selenium 支持 python2.7 以及 python3.5 等主流 python 版本,其安装较为简单,有网的环境下,使用 pip 命令即可自动安装。pip install selenium&无网的环境下,下载&selenium 安装包,然后通过 python 命令也可方便安装。python setup.py install&2) webdriverselenium 安装完成后,我们需要下载所选浏览器的 webdriver,本文以&ChromeDriver为例,为了后面在代码中更加方便的加载相应 webdriver,可将 webdriver 的路径添加至系统 PATH 变量中。注:selenium 通过 webdriver 调用浏览器接口的方式支持多种浏览器,如:ChromeDriver,FirefoxDriver,InternetExplorerDriver,SafariDriver 等真实浏览器,以及:htmlunit、PhantomJS 两个无界面浏览器。大致区别如下:driver类型优点缺点应用真实浏览器真实模拟用户行为效率、稳定性低兼容性测试HtmlUnit速度快js引擎不是主流浏览器支持的包含少量js的页面测试PhantomJS支持js、速度中等、模拟行为接近真实不能模拟不同/特定浏览器的行为非GUI的功能性测试selenium 选用各浏览器时,只修改加载 webdriver 的语句即可,具体的业务逻辑代码和网页元素操作代码不需要做任何改变。二、selenium 在 python 下的使用1) import通过以下语句在 python 中引用 seleniumfrom selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChains&2)浏览器启动测试启动浏览器并打开网址进行测试,注意如果前面没有将 webdriver 路径添加至系统 PATH 变量下,引用时需要键入 webdriver 的完整路径。通过 ChromeOptions 可设置浏览器的初始位置和大小。options = webdriver.ChromeOptions();options.add_argument('--window-position=0,0'); &#chrome 启动初始位置options.add_argument('--window-size='); &#chrome 启动初始大小driver=webdriver.Chrome(chrome_options=options)driver.get('http://game./hslj/html/hslj/') #比赛主页面&&此时看到 Chrome 打开了比赛的 index 页面。3)网页元素操作selenium-webdriver 提供了通过网页元素 id、class、name、css、tagName 等方式获取网页元素的方法。用户可根据网页源码的不同情况进行选择,以下代码为自动在比赛主页输入 rtx、qq 并点击登录、开始比赛的例子。def input_by_id(self, text=u'', element_id=''): & &input_el = self.driver.find_element_by_id(element_id) #通过 id 查找网页元素 & &input_el.clear() & &input_el.send_keys(text) #输入字符串 & &time.sleep(0.5)def click_by_id(self, element_id=''): & &search_el = self.driver.find_element_by_id(element_id) & &search_el.click() #鼠标左键单击 & &time.sleep(0.5)def click_by_class(self, element_class=''): & &search_el = self.driver.find_element_by_class_name(element_class) #通过 class 查找网页元素 & &search_el.click() #鼠标左键单击 & &time.sleep(0.5)self.input_by_id('wadeyang','user-input')self.input_by_id('', 'qq-input')self.click_by_id('login-btn')self.click_by_class('hslj-game-btn')&三、破解搭建好 python-selenium-webdriver 环境,并了解简单使用方法后,下面介绍一下滑动验证码的破解思路。1)图片获取为了计算滑动验证码的拖拽位置,我们首先需要获取原始图片和缺口图片,通过对网页 html 的分析,我们通过以下代码获取两张图片。self.driver.switch_to.frame(self.driver.find_element_by_tag_name('iframe'))#转换 webdriver 的工作环境至子 iframe,通过 tag_name 查找网页元素img1ele = self.driver.find_element_by_id('totalBlock') #获取原始 img 网页元素fatherdiv = self.driver.find_element_by_class_name('oripic')#获取缺口 img 的 divimg2ele = fatherdiv.find_element_by_tag_name('img');#获取缺口 img 网页元素src1 = img1ele.get_attribute('src');#得到原始 img 路径src2 = img2ele.get_attribute('src');#得到缺口 img 路径self.driver.switch_to.default_content()#转换 webdriver 工作环境至默认urlopen = urllib.request #urllib 模块,可通过 pip 安装,import urllib 引用fp = urlopen.urlopen(src1) #打开原始 img 路径data1 = fp.read() #读取数据fp.close()file = open('d://1.jpg', 'w b') #将原始 img 保存为 d://1.jpgfile.write(data1)file.close()fp = urlopen.urlopen(src2) #打开缺口 img 路径data2 = fp.read()fp.close()file = open('d://2.jpg', 'w b') #将缺口 img 保存为 d://2.jpgfile.write(data2)file.close()2)缺口位置计算在获得原始图片和缺口图片后,接下来需要计算缺口的水平位置,也就是需要拖拽的距离。我们首先获取两张图像素的差值。img1 = Image.open('d://1.jpg'); #from PIL import Image 引用img2 = Image.open('d://2.jpg');img3 = ImageChops.difference (img1, img2); #from PIL import ImageChops 引用&再从左到右按列的方式遍历 img3 的像素,当遇像素值连续不为 0 数量超过 70 时停止,此时的 x 坐标即为滑块应拖动的距离。3)拖拽轨迹采集为了模拟正常用户的拖拽轨迹,我们首先需要采集正常用户拖拽验证码时的鼠标操作及运动轨迹。这里我利用了 GhostMouse Free 工具,并通过简单的 C#编程解析其保存文件的方式来将正常用户的拖拽轨迹保存成为不同的文件。c#代码如下:using (StreamReader sr = new StreamReader('e:\data.rms')){ & &String line; & &// Read and display lines from the file until the end of & &// the file is reached. & &bool open = false; & &int filestartindex = 1; & &FileStream fs = null; & &StreamWriter sw = null; & &int lastX = 0, lastY = 0; & &String temp = null; & &Queue X = new Queue(); & &Queue Y = new Queue(); & &Queue D = new Queue(); & &while ((line = sr.ReadLine()) != null){ & & & &if (line.IndexOf('LMouse up') != -1 && open){ & & & & & &open = false; & & & & & &if (X.Sum() > 0){ & & & & & & & &if (File.Exists('e:\dividemousedata\' & filestartindex & '.txt')) & & & & & & & & & &File.Delete('e:\dividemousedata\' & filestartindex & '.txt'); & & & & & & & &fs = new FileStream('e:\dividemousedata\' & filestartindex & '.txt', FileMode.OpenOrCreate, FileAccess.ReadWrite); //可以指定盘符,也可以指定任意文件名,还可以为 word 等文件 & & & & & & & &filestartindex &= 1; & & & & & & & &sw = new StreamWriter(fs); // 创建写入流 & & & & & & & &sw.WriteLine(X.Sum().ToString()); & & & & & & & &while (X.Count > 0){ & & & & & & & & & &string x = X.Dequeue().ToString(); & & & & & & & & & &string y = Y.Dequeue().ToString(); & & & & & & & & & &string d = D.Dequeue().ToString(); & & & & & & & & & &sw.WriteLine(x & ' ' & y & ' ' & d); & & & & & & & &} & & & & & & & &sw.Close(); & & & & & & & &fs.Close(); & & & & & &} & & & & & &X.Clear(); & & & & & &Y.Clear(); & & & & & &D.Clear(); & & & &} & & & &if (line.IndexOf('LMouse down') != -1){ & & & & & &open = & & & & & &temp = line.Split('(')[1]; & & & & & &temp = temp.Split(')')[0]; & & & & & &lastX = int.Parse(temp.Split(',')[0]); & & & & & &lastY = int.Parse(temp.Split(',')[1]); & & & & & &line = sr.ReadLine(); & & & & & &temp = line.Split(' ')[1]; & & & & & &temp = temp.Split('}')[0]; & & & & & &float delay = float.Parse(temp); & & & & & &X.Enqueue(0); Y.Enqueue(0); D.Enqueue(delay); & & & & & & & & & &} & & & &if (open){ & & & & & &temp = line.Split('(')[1]; & & & & & &temp = temp.Split(')')[0]; & & & & & &int posX = int.Parse(temp.Split(',')[0]); & & & & & &int posY = int.Parse(temp.Split(',')[1]); & & & & & &line = sr.ReadLine(); & & & & & &temp = line.Split(' ')[1]; & & & & & &temp = temp.Split('}')[0]; & & & & & &float delay = float.Parse(temp); & & & & & &X.Enqueue(posX - lastX); Y.Enqueue(posY - lastY); D.Enqueue(delay); & & & & & &lastX = posX; & & & & & &lastY = posY; & & & &} & &}}GhostMouse Free 工具记录的文件,及最后生成的拖拽轨迹文件(第一行为拖拽的总长度;第一列为 x 位移,第二列为 y 位移,第三列为停顿时间):4)拖拽轨迹还原有了正常用户的拖拽轨迹文件和滑块需要拖动的距离,我们即可对两者进行匹配,并对轨迹进行还原。这里有一个 trick,因为拖拽距离为 0 至 230,所以采集足够多的轨迹文件,我们就可以不用对拖拽轨迹进行任何缩放,对其进行 100%的还原。self.driver.switch_to.frame(self.driver.find_element_by_tag_name('iframe'))dragger = self.driver.find_element_by_id(element_class)action = ActionChains(self.driver)action.click_and_hold(dragger).perform(); #鼠标左键按下不放action.reset_actions()for index in range(len(x)): & &action.move_by_offset(x[index], y[index]).perform(); #移动一个位移 & &action.reset_actions() & &time.sleep(d[index]); #等待停顿时间action.release().perform(); #鼠标左键松开action.reset_actions()self.driver.switch_to.default_content() &四、最后以上以滑动验证码破解为例介绍了 selenium2.0 在 python 下的应用。使用浏览器操作模拟的方式进行滑动验证码破解与破解 js 然后直接发送请求的方式进行破解相比较,主要的缺点是请求频率太慢,优点是通过简单修改即可适应不同平台的滑动验证码。题图:pexels,CC0 授权。
馆藏&66222
TA的最新馆藏
喜欢该文的人也喜欢相关文章推荐
1、下载解压phantomjs文件,并设置环境变量,
本人的phantomjs 是直接下载的phantomjs压缩文件,直接解压的,需要把它加入环境变量,不然pyspider 运行时找不到phan...
PySpider爬虫框架折腾体验@(进阶)[PySpider,PySpider使用,PySpider体验]最近在看爬虫类的Python文章,了解到了PySpider这个强大的爬虫框架,就想也体验一番,...
我是在自己的vps(centos7)上部署的,使用了virtualenv,使用的python版本为3.5.2
注意编译环境一定要装好。
关于centos7安装python3.5,启用virtual...
一.新的问题与工具平时在淘宝上剁手的时候,总是会看到各种各样的模特。由于自己就读于一所男女比例三比一的工科院校……写代码之余看看美女也是极好的放松方式。但一张一张点右键–另存为又显得太过麻烦而且不切实...
学习/2652.html
pyspider的时候出现了使用js机制的时候出现了问题;
fetch_type='js'
居然页面都打不开了。搜索后发现是系统...
windows win7配置pyspider
背景:PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果...
phantomjs无疑是web测试的一件神器。无界面,跨平台。
不过现下的版本实用中还是有些不足。
1. 不支持flash,没法处理视频网站的测试。
即使是支持plugin的1.4x版本。fla...
引子前不久,学校弄了个SPOC网站,用JAVA写的,内容不多,但是网站的登录验证使用了少见的RSA算法对POST数据进行加密,不禁让我想到可否用Python来模拟用户登录,便有此文.踩点简单浏览网站后...
简介国人编写的强大的网络爬虫系统并自带强大的WebUI,采用Python语言编写吗,分布式架构。支持多种数据库后端
pyspider中文网站:/
他的最新文章
讲师:Array
讲师:李志伟
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 python phantomjs 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信