mysql

推荐列表 站点导航

当前位置:首页 > 数据库 > mysql >

破解极验(geetest)验证码

来源:网络  作者:网友投稿  发布时间:2021-01-22 05:06
最近在搞爬虫的时候在好几个网站都遇到了一种叫做geetest的滑动条验证码,一直没有太好的步伐只能在触发这个验证...

然而要计较缺口的偏移量还要先还原图片,0))x_offset += im.size[0]x_offset = 0for im in im_list_down:new_im.paste(im,randomdef get_merge_image(filename, rcookies.js, 二.在欣赏器上模仿鼠标拖动的操纵 参考内容: 这里要实现鼠标拖动的行动靠直接发送url请求是无法实现的,y):比拟RGB值passpixel1=image1.getpixel((x,要领如下: import PIL.ImageChops as imagechopsdiff=imagechops.difference(image1,这里我借用的参考内容的要领:两张原始图的巨细都是沟通的260*116,116):if is_similar(image1,不需要设置图形界面,而且差值也不要是一层稳定的; 3.geetest固然是横向拖动的, (260,#yoffset=y-445:这里也是一样的,本质就是向退却一格,background_image.get_attribute(style))[0][2])imageurl=re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;, 别的还可以把gt-python-sdk/demo/django_demo/static/index.html内里41-61行注释掉,urllib2,58。

abs(location[x])+10,jpg)jpgfile=cStringIO.StringIO(urllib2.urlopen(imageurl).read())#从头归并图片image=get_merge_image(jpgfile, 此刻在欣赏器里打开:8000/就可以看到安装的geetest样例了, geetest今朝版本客户端最焦点的是geetest.5.5.36.js,z}是一个轨迹记录点,因为我们获得的两个图片是通过拼接而成的,不能过大, (x_offset,x,最好能节制在1-5秒之内,别的两个相邻的记录点的时间也最好能节制在50ms以内, yoffset=50).perform()time.sleep(1)print 第三步,z代表累计时间毫秒): 1.时间不宜太长又可能太短,geetest识别出了这个行动并不是人的行为, cookie[domain]。

要用Django-1.8.14: [root@mysql-test1 ~]# wget --no-check-certificate https://www.djangoproject.com/download/1.8.14/tarball/[root@mysql-test1 ~]# tar zxvf Django-1.8.14.tar.gz[root@mysql-test1 ~]# cd Django-1.8.14[root@mysql-test1 Django-1.8.14]# python setup.py install 后头就可以直接运行了: [root@mysql-test1 ~]# cd gt-python-sdk/demo/django_demo/[root@mysql-test1 django_demo]# python manage.py runserver 0.0.0.0:8000 别的假如安装启动的时候报sqlite相关的错误,其实基础就不需要涉及到什么巨大的数据挖掘呆板进修的算法。

不会涉及到纵向移动, y - 445)#xoffset=track+22:这里的移动位置的值是相对付滑动圆球左上角的相对值,3):if abs(pixel1[i]-pixel2[i])=50:return Falsereturn Truedef get_diff_location(image1。

尚有长高的数值location[x]=int(re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;, (260,留意这里位置是相对付元素左上角的相对值ActionChains(driver).move_to_element_with_offset(to_element=element,y。

(260,也就是圆球高度的一半ActionChains(driver).move_to_element_with_offset(to_element=element, cookie[value],randomdef get_merge_image(filename。

验证不通过,查了些资料也都说拖动轨迹的识别是geetest的焦点内容而无过多的表述,58,0))x_offset += im.size[0]x_offset = 0for im in im_list_down:new_im.paste(im,因为没有界面, //div[@class=gt_cut_bg gt_show]/div)image2=get_image(driver,而且两张原图在配景上也照旧稍有区此外, cookie[expires])else:line = document.cookie = %s=%s; path=%s; domain=%s; expires=%s; % (cookie[name], 最近在搞爬虫的时候在好几个网站都遇到了一种叫做geetest的滑动条验证码,你会发明纵然移动的位置正确了,实际环境这个值是不牢靠的,并且上下发抖的频率不能高,要平缓一点。

所以这部门很容易是被忽略的:y轴的值要节制在[-5, (260,260):for j in range(0, //div[@class=gt_cut_fullbg gt_show]/div)#计较缺口位置loc=get_diff_location(image1,58)))new_im = image.new(RGB,驱动在有下载,abs(location[x])+10,abs(location[x])+10,拖动元素track_string = for track in track_list:track_string = track_string + {%d, (x_offset。

cookie[path], w) as file :for cookie in driver.get_cookies() :#logging.info(cookie)if uexpires in cookie:if cookie[name] in dict_cookie:line = document.cookie = %s=%s; path=%s; domain=%s; expires=%s; % (cookie[name]。

location_list )return imagedef is_similar(image1。

要留意的是最新的Django-1.10.1和当前的GeetestSDK是有兼容性问题的,我用的土步伐是本身搭建一个浅易的web server, static.geetest.com内里只要static目次里的内容即可,需要按照配景图片的缺口来算出这个偏移量, yoffset=y-445).perform()time.sleep(0.1)ActionChains(driver).move_to_element_with_offset(to_element=element,拖动元素#拖动鼠标到指定的位置。

PhantomJS确实是个不错的选择。

按照参考的内容利用了Selenium(也有python版本的)可以实现这一操纵,首先找个东西把原代码名目化一下。

166)))if location[y]==0:passim_list_down.append(im.crop((abs(location[x]),而且隔断的时间也不宜沟通; 2.乡邻的x值差值也不宜太大,我用的浅易web server是HTTP File Server,jpg)jpgfile=cStringIO.StringIO(urllib2.urlopen(imageurl).read())#从头归并图片image=get_merge_image(jpgfile。

30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_cut_fullbg gt_show]).is_displayed())#找到滑动的圆球element=driver.find_element_by_xpath(//div[@class=gt_slider_knob gt_show])#鼠标点击元素并按住不放print 第一步。

要担保最终的计较后的值是22,提示却是怪物吃了饼图,运行init 5可以从字符界面切换到图形界面。

所以这里选择的也是python版本的,上图的是我手动滑动的轨迹。

释放鼠标#释放鼠标ActionChains(driver).release(on_element=element).perform()time.sleep(3)#点击验证submit=driver.find_element_by_xpath(//input[@id=embed-submit])ActionChains(driver).click(on_element=submit).perform()time.sleep(5)driver.quit()if __name__ == __main__:passmain() 运行功效: 五.欣赏器的兼容问题 1.最为重要的就是代码注释里说的y轴的高度问题,但有时候回响较量慢,然后再编译安装python就可以了,IT之家语言我利用的是python2.7,然后再把页面上要挪用的static.geetest.com里的内容都放到我本身搭建的web server上, xoffset=21,location_list):按照位置对图片举办归并还原:filename:图片:location_list:图片位置passim = image.open(filename)new_im = image.new(RGB。

i,所以这里获得的位置并不会是我们要的缺口的位置,x,操作数据挖掘和呆板进修, driver, yoffset=y-445).perform()time.sleep(0.1)ActionChains(driver).move_to_element_with_offset(to_element=element,我们每次滑动鼠标包罗代码实现的滑动操纵在欣赏器里都能显示出滑动的轨迹: 2.模仿人的行为 有了轨迹的数据, xoffset=21,116))x_offset = 0for im in im_list_upper:new_im.paste(im。

每一种渲染出来的高度都是纷歧样的。

centos设置firefox要领如下: [root@db2-test1 ~]# yum groupinstall X Window System -y[root@db2-test1 ~]# yum groupinstall Desktop -y[root@db2-test1 ~]# yum install firefox -y 留意不要纯shell情况下运行, image2)#生成x的移动轨迹点track_list=get_track(loc)#找到滑动的圆球element=driver.find_element_by_xpath(//div[@class=gt_slider_knob gt_show])location=element.location#得到滑动圆球的高度y=location[y]#鼠标点击元素并按住不放print 第一步, file_path):with open(file_path,我这里利用的是52.0.2743.116,并在host内里把static.geetest.com域名指向到我本身的web server,re, xoffset=track+22, xoffset=21, 后头我也就基于了以上的问题去一步一步研究如何实现模仿这一操纵: 一.安装设置geetest的样例 首先本身安装设置一份geetest的样例,一直没有太好的步伐只能在触发这个验证码后发个报警去手动处理惩罚一下,要在图形界面的运行, 30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_cut_bg gt_show]).is_displayed())WebDriverWait(driver,并不是我们实际肉眼看到的图像,最终也就只有Firefox了,两眼一看就能识别出差异来: 这里我总结了一下不同(一个{x,260):for j in range(0,image2):计较缺口的位置i=0for i in range(0,re,可是经我试下来这个要领和PhantomJS有兼容性问题, image2)diff.show()print diff.getbbox() 可是这在我们这里并不合用,然后再插手以下的内容: index.html页面的上直接挪用的是gt.js,这里正则过滤的时候要留意一下的,116))im_list_upper=[]im_list_down=[]for location in location_list:if location[y]==-58:passim_list_upper.append(im.crop((abs(location[x]),而轨迹变量里的是圆球的中心点。

cookie[path],点击元素ActionChains(driver).click_and_hold(on_element=element).perform()time.sleep(0.15)print 第二步,那就通过两个for轮回依次比拟每个像素点的RGB值。

116))x_offset = 0for im in im_list_upper:new_im.paste(im。

location_list )return image2.计较缺口位置 通过python的PIL.ImageChops可以计较出两个图片差异处所的位置,听上去就已经很高峻上。

30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_cut_fullbg gt_show]).is_displayed())#下载图片image1=get_image(driver,%d},Chrome在centos6.5内里没有现成的安装包, 通过python的pip可以直接安装,这里退了5格是因为圆球的位置和滑动条的左边沿有5格的间隔ActionChains(driver).move_to_element_with_offset(to_element=element。

我这里显示的版本是selenium-2.53, cookie[path], file_path,而下图的是我通过代码拖动的轨迹, dict_cookie[cookie[name]], 完整代码如下: #!/usr/local/bin/python# -*- coding: utf8 -*-Created on 2016年9月2日@author: PaoloLiufrom selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.action_chains import ActionChainsimport PIL.Image as imageimport time,background_image.get_attribute(style))[0][1])location[y]=int(re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;,Chrome和Firefox都可以通过webdriver.add_cookie来实现,Chrome和Firefox三个欣赏器, cookie[domain])#logging.info(line)file.write(line.encode(utf8))def load_cookies(self,0,background_image.get_attribute(style))[0][1])location[y]=int(re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;, 参考内容:#python 安装git: [root@mysql-test1 ~]# yum install git 在github中clone出最新Demo项目: [root@mysql-test1 ~]# git clone https://github.com/GeeTeam/gt-python-sdk.git 安装GeetestSDK: [root@mysql-test1 ~]# cd gt-python-sdk/[root@mysql-test1 gt-python-sdk]# python setup.py install 安装Django, driver,image2):计较缺口的位置i=0for i in range(0。

50)/100)print track_string#xoffset=21,有兼容问题) 3.webdriver的cookie问题: 有的时候我们需要带入cookie举办验证,y))pixel2=image2.getpixel((x,166)))if location[y]==0:passim_list_down.append(im.crop((abs(location[x]),j)==False:return i四.鼠标拖动的轨迹1.输出鼠标滑动轨迹 参考内容: 假如我们直接把上面算出来的缺口位置放到前面剧本里, 30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_slider_knob gt_show]).is_displayed())WebDriverWait(driver,成立坚若磐石的多维验证防止体系,background_image.get_attribute(style))[0][0]location_list.append(location)imageurl=imageurl.replace(webp,我们就可以举办比拟阐明白,cStringIO,必然要担保最终的功效是拖动球高度的一半(一般都是22); 2.版权兼容性(以下是我验证过可行的): selenium (2.53.6)===PhantomJS 2.1 selenium (2.53.6)===Chrome 52 selenium (2.53.6)===Firefox 45(留意不要用48,3):if abs(pixel1[i]-pixel2[i])=50:return Falsereturn Truedef get_diff_location(image1,location_list):按照位置对图片举办归并还原:filename:图片:location_list:图片位置passim = image.open(filename)new_im = image.new(RGB, yoffset=y-445).perform()time.sleep(0.1)ActionChains(driver).move_to_element_with_offset(to_element=element。

我是这样办理的: def save_cookies(self,j)==False:return idef get_track(length):按照缺口的位置模仿x轴移动的轨迹passlist=[]#隔断通过随机范畴函数来得到x=random.randint(1,abs(location[x])+10, inputcookie):#LINE = document.cookie = {name}={value}; path={path}; domain={domain}; expires={expires};dict_cookie = {}for item in inputcookie.split(;):dict_cookie[item.split(=)[0].strip()] = item.split(=)[1].strip()#logging.info(dict_cookie)with open(file_path,image2。

116))im_list_upper=[]im_list_down=[]for location in location_list:if location[y]==-58:passim_list_upper.append(im.crop((abs(location[x]), 1.还原图片 如上图,y代表y轴,116):if is_similar(image1,不外要留意的是差异的欣赏器渲染出来的功效是纷歧样的,cStringIO, (x_offset,可是利用下来破解的乐成率不高,pictures内里的图片找不到会自动指向到他们备用的网站的, yoffset=y-445).perform()print 第三步,3)while length-x=5:list.append(x)length=length-xx=random.randint(1, cookie[domain],并且后头研究拖动轨迹的时候还需要对样例做必然的窜改,3)for i in xrange(length):list.append(1)return listdef main():#这里的文件路径是webdriver的文件路径driver = webdriver.Chrome(executable_path=rC:Program Files (x86)GoogleChromeApplicationchromedriver.exe)#driver = webdriver.Firefox()#打开网页driver.get(:8000/)#期待页面的上元素刷新出来WebDriverWait(driver。

cookie[path], dict_cookie[cookie[name]],我试了PhantomJS,image2,我利用的是chrome, rcookies.js)# reopen urldriver.get(url) 4.PhantomJS欣赏器理会出来的图片url是不带引号的,下载完后解压放到chrome的安装目次即可,这我们就需要去查察自然人滑动鼠标和我们代码实现的滑动在轨迹上有什么差异,别的还要留意chrome的版本,那么这也应该是主要的难点了, 30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_cut_bg gt_show]).is_displayed())WebDriverWait(driver,y))for i in range(0,那就有了cookie的问题了。

cookie[value], cookies)# delete all the cookiesdriver.delete_all_cookies()# load the cookies from the fileself.load_cookies(driver,最好节制在以5内,原始的图片是乱的,58))x_offset += im.size[0]return new_imdef get_image(driver, xoffset=200,image2,x代表x轴。

释放鼠标#释放鼠标ActionChains(driver).release(on_element=element).perform()time.sleep(3)if __name__ == __main__:passmain() 三.计较图片中缺口的偏移量 参考内容: 上面的移动位置我写了一个牢靠的值,我试下来最好的步伐就是平稳牢靠的0上。

58)))new_im = image.new(RGB, 30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_slider_knob gt_show]).is_displayed())WebDriverWait(driver,固然geetest官网上有样例。

xoffset=21。

是他们官网的样例,这是官网的描写, #!/usr/local/bin/python# -*- coding: utf8 -*-Created on 2016年9月2日@author: PaoloLiufrom selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.action_chains import ActionChainsimport timedef main():#这里的文件路径是webdriver的文件路径driver = webdriver.Chrome(executable_path=rC:Program Files (x86)GoogleChromeApplicationchromedriver.exe)#打开网页driver.get(:8000/)#期待页面的上元素刷新出来WebDriverWait(driver, r) as file:driver.execute_script(file.read()) 再如此挪用就可以办理cookie的兼容性问题了: driver.get(url)# save the cookies to a fileself.save_cookies(driver, 厥后研究了下以为要破解这个验证码有这么几个问题: 无法直接通过发送url请求来实现鼠标拖动的行动; 实际的配景图片是乱的,div):下载并还原图片:driver:webdriver:div:图片的divpass#找到图片地址的divbackground_images=driver.find_elements_by_xpath(div)location_list=[]imageurl=for background_image in background_images:location={}#在html内里理会出小图片的url地点,再由gt.js去挪用geetest.5.5.36.js, cookie[domain])else:line = document.cookie = %s=%s; path=%s; domain=%s; % (cookie[name],也不要上下发抖了,安装利用较量巨大, 我最终利用的是selenium+Firefox,5]范畴内,尚有长高的数值location[x]=int(re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;, ,虽然geetest.5.5.36.js是要用我适才改革过的谁人,i, yoffset=y-445).perform()time.sleep(0.1)ActionChains(driver).move_to_element_with_offset(to_element=element。

点击元素ActionChains(driver).click_and_hold(on_element=element).perform()time.sleep(1)print 第二步。

(x_offset,很显然,所以要加上圆球长度的一半,y))for i in range(0, cookie[expires])else:if cookie[name] in dict_cookie:line = document.cookie = %s=%s; path=%s; domain=%s; % (cookie[name]。

image2,div):下载并还原图片:driver:webdriver:div:图片的divpass#找到图片地址的divbackground_images=driver.find_elements_by_xpath(div)location_list=[]imageurl=for background_image in background_images:location={}#在html内里理会出小图片的url地点,假如相差高出50则就认为找到了缺口的位置: def is_similar(image1,urllib2,也看不出运行的环境, xoffset=21,如下图; 开创行为鉴别算法, yoffset=y-445).perform()#隔断时间也通过随机函数来得到time.sleep(random.randint(10,那就要安装Linux的sqlite-devel包,直接在shell里运行就可以了。

而Firefox和Chrome理会出来的是带引号的,我们可以把它复制出来加以改革,y):比拟RGB值passpixel1=image1.getpixel((x,只保存嵌入式的Demo,除此之外还需要按照欣赏器下载webdriver。

可是我们可以在html内里可以看到把同一个图片的位置举办从头组合就可以看到还原后的图片了: 代码如下: import PIL.Image as imageimport PIL.ImageChops as imagechopsimport time,提取高出200多个行为鉴别特征,background_image.get_attribute(style))[0][2])imageurl=re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;,0,需要有个真的欣赏器再去模仿鼠标拖动的行动,background_image.get_attribute(style))[0][0]location_list.append(location)imageurl=imageurl.replace(webp,58))x_offset += im.size[0]return new_imdef get_image(driver。

而difference要领计较得过于准确, % (track, 如此一来,y))pixel2=image2.getpixel((x,我实际运行的情况是centos,可以在下载,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/sql/mysql/13089.shtml

相关文章
最新文章
 这些文件如果在configure命 这些文件如果在configure命

时间:2021-01-22

说明在数据库崩溃时内存 说明在数据库崩溃时内存

时间:2021-01-22

破解极验(geetest)验证码 破解极验(geetest)验证码

时间:2021-01-22

今天这种代码阅读方法仍 今天这种代码阅读方法仍

时间:2021-01-22

 count(*) as cnt from sakila.fi count(*) as cnt from sakila.fi

时间:2021-01-22

 可能你注意到系统提示的 可能你注意到系统提示的

时间:2021-01-22

搭建环境与运行 搭建环境与运行

时间:2021-01-22

MySQL主从复制的常见拓扑 MySQL主从复制的常见拓扑

时间:2021-01-22

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

破解极验(geetest)验证码

2021-01-22 编辑:网友投稿

然而要计较缺口的偏移量还要先还原图片,0))x_offset += im.size[0]x_offset = 0for im in im_list_down:new_im.paste(im,randomdef get_merge_image(filename, rcookies.js, 二.在欣赏器上模仿鼠标拖动的操纵 参考内容: 这里要实现鼠标拖动的行动靠直接发送url请求是无法实现的,y):比拟RGB值passpixel1=image1.getpixel((x,要领如下: import PIL.ImageChops as imagechopsdiff=imagechops.difference(image1,这里我借用的参考内容的要领:两张原始图的巨细都是沟通的260*116,116):if is_similar(image1,不需要设置图形界面,而且差值也不要是一层稳定的; 3.geetest固然是横向拖动的, (260,#yoffset=y-445:这里也是一样的,本质就是向退却一格,background_image.get_attribute(style))[0][2])imageurl=re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;, 别的还可以把gt-python-sdk/demo/django_demo/static/index.html内里41-61行注释掉,urllib2,58。

abs(location[x])+10,jpg)jpgfile=cStringIO.StringIO(urllib2.urlopen(imageurl).read())#从头归并图片image=get_merge_image(jpgfile, 此刻在欣赏器里打开:8000/就可以看到安装的geetest样例了, geetest今朝版本客户端最焦点的是geetest.5.5.36.js,z}是一个轨迹记录点,因为我们获得的两个图片是通过拼接而成的,不能过大, (x_offset,x,最好能节制在1-5秒之内,别的两个相邻的记录点的时间也最好能节制在50ms以内, yoffset=50).perform()time.sleep(1)print 第三步,z代表累计时间毫秒): 1.时间不宜太长又可能太短,geetest识别出了这个行动并不是人的行为, cookie[domain]。

要用Django-1.8.14: [root@mysql-test1 ~]# wget --no-check-certificate https://www.djangoproject.com/download/1.8.14/tarball/[root@mysql-test1 ~]# tar zxvf Django-1.8.14.tar.gz[root@mysql-test1 ~]# cd Django-1.8.14[root@mysql-test1 Django-1.8.14]# python setup.py install 后头就可以直接运行了: [root@mysql-test1 ~]# cd gt-python-sdk/demo/django_demo/[root@mysql-test1 django_demo]# python manage.py runserver 0.0.0.0:8000 别的假如安装启动的时候报sqlite相关的错误,其实基础就不需要涉及到什么巨大的数据挖掘呆板进修的算法。

不会涉及到纵向移动, y - 445)#xoffset=track+22:这里的移动位置的值是相对付滑动圆球左上角的相对值,3):if abs(pixel1[i]-pixel2[i])=50:return Falsereturn Truedef get_diff_location(image1。

尚有长高的数值location[x]=int(re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;, (260,留意这里位置是相对付元素左上角的相对值ActionChains(driver).move_to_element_with_offset(to_element=element,y。

(260,也就是圆球高度的一半ActionChains(driver).move_to_element_with_offset(to_element=element, cookie[value],randomdef get_merge_image(filename。

验证不通过,查了些资料也都说拖动轨迹的识别是geetest的焦点内容而无过多的表述,58,0))x_offset += im.size[0]x_offset = 0for im in im_list_down:new_im.paste(im,因为没有界面, //div[@class=gt_cut_bg gt_show]/div)image2=get_image(driver,而且两张原图在配景上也照旧稍有区此外, cookie[expires])else:line = document.cookie = %s=%s; path=%s; domain=%s; expires=%s; % (cookie[name], 最近在搞爬虫的时候在好几个网站都遇到了一种叫做geetest的滑动条验证码,你会发明纵然移动的位置正确了,实际环境这个值是不牢靠的,并且上下发抖的频率不能高,要平缓一点。

所以这部门很容易是被忽略的:y轴的值要节制在[-5, (260,260):for j in range(0, //div[@class=gt_cut_fullbg gt_show]/div)#计较缺口位置loc=get_diff_location(image1,58)))new_im = image.new(RGB,驱动在有下载,abs(location[x])+10,abs(location[x])+10,拖动元素track_string = for track in track_list:track_string = track_string + {%d, (x_offset。

cookie[path], w) as file :for cookie in driver.get_cookies() :#logging.info(cookie)if uexpires in cookie:if cookie[name] in dict_cookie:line = document.cookie = %s=%s; path=%s; domain=%s; expires=%s; % (cookie[name]。

location_list )return imagedef is_similar(image1。

要留意的是最新的Django-1.10.1和当前的GeetestSDK是有兼容性问题的,我用的土步伐是本身搭建一个浅易的web server, static.geetest.com内里只要static目次里的内容即可,需要按照配景图片的缺口来算出这个偏移量, yoffset=y-445).perform()time.sleep(0.1)ActionChains(driver).move_to_element_with_offset(to_element=element,拖动元素#拖动鼠标到指定的位置。

PhantomJS确实是个不错的选择。

按照参考的内容利用了Selenium(也有python版本的)可以实现这一操纵,首先找个东西把原代码名目化一下。

166)))if location[y]==0:passim_list_down.append(im.crop((abs(location[x]),而且隔断的时间也不宜沟通; 2.乡邻的x值差值也不宜太大,我用的浅易web server是HTTP File Server,jpg)jpgfile=cStringIO.StringIO(urllib2.urlopen(imageurl).read())#从头归并图片image=get_merge_image(jpgfile。

30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_cut_fullbg gt_show]).is_displayed())#找到滑动的圆球element=driver.find_element_by_xpath(//div[@class=gt_slider_knob gt_show])#鼠标点击元素并按住不放print 第一步。

要担保最终的计较后的值是22,提示却是怪物吃了饼图,运行init 5可以从字符界面切换到图形界面。

所以这里选择的也是python版本的,上图的是我手动滑动的轨迹。

释放鼠标#释放鼠标ActionChains(driver).release(on_element=element).perform()time.sleep(3)#点击验证submit=driver.find_element_by_xpath(//input[@id=embed-submit])ActionChains(driver).click(on_element=submit).perform()time.sleep(5)driver.quit()if __name__ == __main__:passmain() 运行功效: 五.欣赏器的兼容问题 1.最为重要的就是代码注释里说的y轴的高度问题,但有时候回响较量慢,然后再编译安装python就可以了,IT之家语言我利用的是python2.7,然后再把页面上要挪用的static.geetest.com里的内容都放到我本身搭建的web server上, xoffset=21,location_list):按照位置对图片举办归并还原:filename:图片:location_list:图片位置passim = image.open(filename)new_im = image.new(RGB。

i,所以这里获得的位置并不会是我们要的缺口的位置,x,操作数据挖掘和呆板进修, driver, yoffset=y-445).perform()time.sleep(0.1)ActionChains(driver).move_to_element_with_offset(to_element=element,我们每次滑动鼠标包罗代码实现的滑动操纵在欣赏器里都能显示出滑动的轨迹: 2.模仿人的行为 有了轨迹的数据, xoffset=21,116))x_offset = 0for im in im_list_upper:new_im.paste(im。

每一种渲染出来的高度都是纷歧样的。

centos设置firefox要领如下: [root@db2-test1 ~]# yum groupinstall X Window System -y[root@db2-test1 ~]# yum groupinstall Desktop -y[root@db2-test1 ~]# yum install firefox -y 留意不要纯shell情况下运行, image2)#生成x的移动轨迹点track_list=get_track(loc)#找到滑动的圆球element=driver.find_element_by_xpath(//div[@class=gt_slider_knob gt_show])location=element.location#得到滑动圆球的高度y=location[y]#鼠标点击元素并按住不放print 第一步, file_path):with open(file_path,我这里利用的是52.0.2743.116,并在host内里把static.geetest.com域名指向到我本身的web server,re, xoffset=track+22, xoffset=21, 后头我也就基于了以上的问题去一步一步研究如何实现模仿这一操纵: 一.安装设置geetest的样例 首先本身安装设置一份geetest的样例,一直没有太好的步伐只能在触发这个验证码后发个报警去手动处理惩罚一下,要在图形界面的运行, 30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_cut_bg gt_show]).is_displayed())WebDriverWait(driver,并不是我们实际肉眼看到的图像,最终也就只有Firefox了,两眼一看就能识别出差异来: 这里我总结了一下不同(一个{x,260):for j in range(0,image2):计较缺口的位置i=0for i in range(0,re,可是经我试下来这个要领和PhantomJS有兼容性问题, image2)diff.show()print diff.getbbox() 可是这在我们这里并不合用,然后再插手以下的内容: index.html页面的上直接挪用的是gt.js,这里正则过滤的时候要留意一下的,116))im_list_upper=[]im_list_down=[]for location in location_list:if location[y]==-58:passim_list_upper.append(im.crop((abs(location[x]),而轨迹变量里的是圆球的中心点。

cookie[path],点击元素ActionChains(driver).click_and_hold(on_element=element).perform()time.sleep(0.15)print 第二步,那就通过两个for轮回依次比拟每个像素点的RGB值。

116))x_offset = 0for im in im_list_upper:new_im.paste(im。

location_list )return image2.计较缺口位置 通过python的PIL.ImageChops可以计较出两个图片差异处所的位置,听上去就已经很高峻上。

30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_cut_fullbg gt_show]).is_displayed())#下载图片image1=get_image(driver,%d},Chrome在centos6.5内里没有现成的安装包, 通过python的pip可以直接安装,这里退了5格是因为圆球的位置和滑动条的左边沿有5格的间隔ActionChains(driver).move_to_element_with_offset(to_element=element。

我这里显示的版本是selenium-2.53, cookie[path], file_path,而下图的是我通过代码拖动的轨迹, dict_cookie[cookie[name]], 完整代码如下: #!/usr/local/bin/python# -*- coding: utf8 -*-Created on 2016年9月2日@author: PaoloLiufrom selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.action_chains import ActionChainsimport PIL.Image as imageimport time,background_image.get_attribute(style))[0][1])location[y]=int(re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;,Chrome和Firefox都可以通过webdriver.add_cookie来实现,Chrome和Firefox三个欣赏器, cookie[domain])#logging.info(line)file.write(line.encode(utf8))def load_cookies(self,0,background_image.get_attribute(style))[0][1])location[y]=int(re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;, 参考内容:#python 安装git: [root@mysql-test1 ~]# yum install git 在github中clone出最新Demo项目: [root@mysql-test1 ~]# git clone https://github.com/GeeTeam/gt-python-sdk.git 安装GeetestSDK: [root@mysql-test1 ~]# cd gt-python-sdk/[root@mysql-test1 gt-python-sdk]# python setup.py install 安装Django, driver,image2):计较缺口的位置i=0for i in range(0。

50)/100)print track_string#xoffset=21,有兼容问题) 3.webdriver的cookie问题: 有的时候我们需要带入cookie举办验证,y))pixel2=image2.getpixel((x,166)))if location[y]==0:passim_list_down.append(im.crop((abs(location[x]),j)==False:return i四.鼠标拖动的轨迹1.输出鼠标滑动轨迹 参考内容: 假如我们直接把上面算出来的缺口位置放到前面剧本里, 30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_slider_knob gt_show]).is_displayed())WebDriverWait(driver,成立坚若磐石的多维验证防止体系,background_image.get_attribute(style))[0][0]location_list.append(location)imageurl=imageurl.replace(webp,我们就可以举办比拟阐明白,cStringIO,必然要担保最终的功效是拖动球高度的一半(一般都是22); 2.版权兼容性(以下是我验证过可行的): selenium (2.53.6)===PhantomJS 2.1 selenium (2.53.6)===Chrome 52 selenium (2.53.6)===Firefox 45(留意不要用48,3):if abs(pixel1[i]-pixel2[i])=50:return Falsereturn Truedef get_diff_location(image1,location_list):按照位置对图片举办归并还原:filename:图片:location_list:图片位置passim = image.open(filename)new_im = image.new(RGB, yoffset=y-445).perform()time.sleep(0.1)ActionChains(driver).move_to_element_with_offset(to_element=element。

我是这样办理的: def save_cookies(self,j)==False:return idef get_track(length):按照缺口的位置模仿x轴移动的轨迹passlist=[]#隔断通过随机范畴函数来得到x=random.randint(1,abs(location[x])+10, inputcookie):#LINE = document.cookie = {name}={value}; path={path}; domain={domain}; expires={expires};dict_cookie = {}for item in inputcookie.split(;):dict_cookie[item.split(=)[0].strip()] = item.split(=)[1].strip()#logging.info(dict_cookie)with open(file_path,image2。

116))im_list_upper=[]im_list_down=[]for location in location_list:if location[y]==-58:passim_list_upper.append(im.crop((abs(location[x]), 1.还原图片 如上图,y代表y轴,116):if is_similar(image1,不外要留意的是差异的欣赏器渲染出来的功效是纷歧样的,cStringIO, (x_offset,可是利用下来破解的乐成率不高,pictures内里的图片找不到会自动指向到他们备用的网站的, yoffset=y-445).perform()print 第三步,3)while length-x=5:list.append(x)length=length-xx=random.randint(1, cookie[domain],并且后头研究拖动轨迹的时候还需要对样例做必然的窜改,3)for i in xrange(length):list.append(1)return listdef main():#这里的文件路径是webdriver的文件路径driver = webdriver.Chrome(executable_path=rC:Program Files (x86)GoogleChromeApplicationchromedriver.exe)#driver = webdriver.Firefox()#打开网页driver.get(:8000/)#期待页面的上元素刷新出来WebDriverWait(driver。

cookie[path], dict_cookie[cookie[name]],我试了PhantomJS,image2,我利用的是chrome, rcookies.js)# reopen urldriver.get(url) 4.PhantomJS欣赏器理会出来的图片url是不带引号的,下载完后解压放到chrome的安装目次即可,这我们就需要去查察自然人滑动鼠标和我们代码实现的滑动在轨迹上有什么差异,别的还要留意chrome的版本,那么这也应该是主要的难点了, 30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_cut_bg gt_show]).is_displayed())WebDriverWait(driver,y))for i in range(0,那就有了cookie的问题了。

cookie[value], cookies)# delete all the cookiesdriver.delete_all_cookies()# load the cookies from the fileself.load_cookies(driver,最好节制在以5内,原始的图片是乱的,58))x_offset += im.size[0]return new_imdef get_image(driver, xoffset=200,image2,x代表x轴。

释放鼠标#释放鼠标ActionChains(driver).release(on_element=element).perform()time.sleep(3)if __name__ == __main__:passmain() 三.计较图片中缺口的偏移量 参考内容: 上面的移动位置我写了一个牢靠的值,我试下来最好的步伐就是平稳牢靠的0上。

58)))new_im = image.new(RGB, 30).until(lambda the_driver: the_driver.find_element_by_xpath(//div[@class=gt_slider_knob gt_show]).is_displayed())WebDriverWait(driver,固然geetest官网上有样例。

xoffset=21。

是他们官网的样例,这是官网的描写, #!/usr/local/bin/python# -*- coding: utf8 -*-Created on 2016年9月2日@author: PaoloLiufrom selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.action_chains import ActionChainsimport timedef main():#这里的文件路径是webdriver的文件路径driver = webdriver.Chrome(executable_path=rC:Program Files (x86)GoogleChromeApplicationchromedriver.exe)#打开网页driver.get(:8000/)#期待页面的上元素刷新出来WebDriverWait(driver, r) as file:driver.execute_script(file.read()) 再如此挪用就可以办理cookie的兼容性问题了: driver.get(url)# save the cookies to a fileself.save_cookies(driver, 厥后研究了下以为要破解这个验证码有这么几个问题: 无法直接通过发送url请求来实现鼠标拖动的行动; 实际的配景图片是乱的,div):下载并还原图片:driver:webdriver:div:图片的divpass#找到图片地址的divbackground_images=driver.find_elements_by_xpath(div)location_list=[]imageurl=for background_image in background_images:location={}#在html内里理会出小图片的url地点,再由gt.js去挪用geetest.5.5.36.js, cookie[domain])else:line = document.cookie = %s=%s; path=%s; domain=%s; % (cookie[name],也不要上下发抖了,安装利用较量巨大, 我最终利用的是selenium+Firefox,5]范畴内,尚有长高的数值location[x]=int(re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;, ,虽然geetest.5.5.36.js是要用我适才改革过的谁人,i, yoffset=y-445).perform()time.sleep(0.1)ActionChains(driver).move_to_element_with_offset(to_element=element。

点击元素ActionChains(driver).click_and_hold(on_element=element).perform()time.sleep(1)print 第二步。

(x_offset,很显然,所以要加上圆球长度的一半,y))for i in range(0, cookie[expires])else:if cookie[name] in dict_cookie:line = document.cookie = %s=%s; path=%s; domain=%s; % (cookie[name]。

image2,div):下载并还原图片:driver:webdriver:div:图片的divpass#找到图片地址的divbackground_images=driver.find_elements_by_xpath(div)location_list=[]imageurl=for background_image in background_images:location={}#在html内里理会出小图片的url地点,假如相差高出50则就认为找到了缺口的位置: def is_similar(image1,urllib2,也看不出运行的环境, xoffset=21,如下图; 开创行为鉴别算法, yoffset=y-445).perform()#隔断时间也通过随机函数来得到time.sleep(random.randint(10,那就要安装Linux的sqlite-devel包,直接在shell里运行就可以了。

而Firefox和Chrome理会出来的是带引号的,我们可以把它复制出来加以改革,y):比拟RGB值passpixel1=image1.getpixel((x,只保存嵌入式的Demo,除此之外还需要按照欣赏器下载webdriver。

可是我们可以在html内里可以看到把同一个图片的位置举办从头组合就可以看到还原后的图片了: 代码如下: import PIL.Image as imageimport PIL.ImageChops as imagechopsimport time,提取高出200多个行为鉴别特征,background_image.get_attribute(style))[0][2])imageurl=re.findall(background-image: url((.*)); background-position: (.*)px (.*)px;,0,需要有个真的欣赏器再去模仿鼠标拖动的行动,background_image.get_attribute(style))[0][0]location_list.append(location)imageurl=imageurl.replace(webp,58))x_offset += im.size[0]return new_imdef get_image(driver。

而difference要领计较得过于准确, % (track, 如此一来,y))pixel2=image2.getpixel((x,我实际运行的情况是centos,可以在下载,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/sql/mysql/13089.shtml

相关文章

风云图片

推荐阅读

返回mysql频道首页