这篇文章主要介绍了python3破解吉斯特(极验)的滑块验证码功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
下面一段代码给大家介绍大蟒破解吉斯特验证码功能,具体代码如下所示:
从硒导入网驱动程序
从selenium.webdriver.support.ui导入WebDriverWait
从硒。网络驱动。常见。动作链导入操作链
进口PIL .图像作为图像
导入时间,re,随机
导入请求
尝试:
从斯特林堡进口斯特林堡
除了导入错误:
从超正析象管导入斯特林乔
#爬虫模拟的浏览器头部信息
agent=' Mozilla/5.0(Windows NT 5.1;rv:33.0)壁虎/20100101火狐/33.0 '
标题={
"用户代理":代理
}
# 根据位置对图片进行合并还原
#文件名:图片
# location_list:图片位置
#内部两个图片处理函数的介绍
#裁剪函数带的参数为(起始点的横坐标,起始点的纵坐标,宽度,高度)
#粘贴函数的参数为(需要修改的图片,粘贴的起始点的横坐标,粘贴的起始点的纵坐标)
def获取_合并_图像(文件名,位置列表):
#打开图片文件
im=image.open(文件名)
#创建新的图片,大小为260*116
new_im=image.new('RGB ',(260,116))
im_list_upper=[]
im_list_down=[]
# 拷贝图片
对于位置列表中的位置:
#上面的图片
如果位置['y']==-58:
im _ list _ upper。追加(im。作物((abs(位置[' x ']),58,ABS(位置['x']) 10,166)))
#下面的图片
如果位置['y']==0:
im _ list _ down。追加(im。crop((ABS(location[' x ']),0,abs(location['x']) 10,58))
new_im=image.new('RGB ',(260,116))
x_offset=0
#黏贴图片
对于im_list_upper中的即时消息:
new_im.paste(im,(x_offset,0))
x_offset=im.size[0]
x_offset=0
对于im_list_down中的即时消息:
new_im.paste(im,(x_offset,58))
x_offset=im.size[0]
返回新消息
#下载并还原图片
#驱动程序:网络驱动程序
# div:图片的差异
def get_image(驱动程序,分区):
#找到图片所在的差异
背景_图像=驱动程序。通过XPath查找元素(div)
location_list=[]
imageurl=' '
#图片是被半铸钢钢性铸铁(铸造半钢)按照位移的方式打乱的,我们需要找出这些位移,为后续还原做好准备
对于背景图像中的背景图像:
位置={}
#在超文本标记语言里面解析出小图片的全球资源定位器(统一资源定位器)地址,还有长高的数值
location[' x ']=int(re。查找全部('背景图像:URL \(').*)'\);背景-职位:(。*)px(.*)px;',背景_图像。get _ attribute(' style ')[0][1])
location[' y ']=int(re。查找全部('背景图像:URL \(').*)'\);背景-职位:(。*)px(.*)px;',背景_图像。get _ attribute(' style ')[0][2])
imageurl=re。查找全部('背景图像:URL \(').*)'\);背景-职位:(。*)px(.*)px;',背景_图像。get _ attribute(' style ')[0][0]
位置_列表.追加(位置)
#替换图片的后缀,获得图片的统一资源定位器
imageurl=imageurl。替换(' webp ',' jpg ')
#获得图片的名字
imageName=imageurl。split('/')[-1]
#获得图片
session=requests.session()
r=session.get(imageurl,headers=headers,verify=False)
#下载图片
用打开(imageName,“wb”)作为女:
f.write(r.content)
f.close()
#重新合并还原图片
image=get _ merge _ image(imageName,location_list)
返回图像
#对比RGB值
def is_similar(image1,image2,x,y):
及格
#获取指定位置的RGB值
pixel1=image1.getpixel((x,y))
pixel2=image2.getpixel((x,y))
对于范围(0,3)内的我:
# 如果相差超过50则就认为找到了缺口的位置
如果abs(像素1[I]像素2[i])=50:
返回错误的
返回真实的
#计算缺口的位置
定义获取不同位置(图像1,图像2):
i=0
# 两张原始图的大小都是相同的260*116
# 那就通过两个为循环依次对比每个像素点的RGB值
# 如果相差超过50则就认为找到了缺口的位置
对于范围内的一(0.260):
对于范围(0,116)内的j:
if is_similar(image1,image2,I,j)==False:
返回我
#根据缺口的位置模拟x轴移动的轨迹
def获取_跟踪(长度):
及格
list=[]
#间隔通过随机范围函数来获得,每次移动一步或者两步
x=random.randint(1,3)
#生成轨迹并保存到目录内
而长度x=5:
list.append(x)
长度=长度加在以-u结尾的法语词源的名词之后构成复数
x=random.randint(1,3)
#最后五步都是一步步移动
对于范围内的我(长度):
list.append(1)
返回列表
#滑动验证码破解程序
def main():
#打开火狐浏览器
driver=webdriver .火狐()
#用火狐浏览器打开网页
司机。get(' http://www。吉斯特。com/exp _ embed’)
#等待页面的上元素刷新出来
WebDriverWait(司机,30)。直到(lambda the _ driver:the _ driver。find _ element _ by _ XPath('//div[@ class=' gt _ slider _ knob gt _ show ']').is_displayed())
WebDriverWait(司机,30)。直到(lambda the _ driver:the _ driver。find _ element _ by _ XPath('//div[@ class=' gt _ cut _ BG gt _ show ']').is_displayed())
WebDriverWait(司机,30)。直到(lambda the _ driver:the _ driver。find _ element _ by _ XPath('//div[@ class=' gt _ cut _ full BG gt _ show ']').is_displayed())
#下载图片
image1=get_image(driver,'//div[@ class=' gt _ cut _ BG gt _ show ']/div ')
image2=get_image(driver,'//div[@ class=' gt _ cut _ full BG gt _ show ']/div ')
#计算缺口位置
loc=get_diff_location(image1,image2)
#生成x的移动轨迹点
跟踪列表=获取跟踪(位置)
#找到滑动的圆球
元素=驱动程序。find _ element _ by _ XPath('//div[@ class=' gt _ slider _ knob gt _ show ']')
位置=元素。位置
#获得滑动圆球的高度
y=位置['y']
#鼠标点击元素并按住不放
打印('第一步,点击元素)
动作链(驱动程序)。单击并按住(on_element=element).执行()
时间。睡眠(0.15)
打印('第二步,拖动元素)
track_string=' '
对于曲目列表中的曲目:
#不能移动太快,否则会被认为是程序执行
track_string=track_string '{%d,%d},' % (track,y - 445)
# xoffset=轨道22:这里的移动位置的值是相对于滑动圆球左上角的相对值,而轨迹变量里的是圆球的中心点,所以要加上圆球长度的一半。
#yoffset=y-445:这里也是一样的。不过要注意的是不同的浏览器渲染出来的结果是不一样的,要保证最终的计算后的值是22,也就是圆球高度的一半
动作链(驱动程序)。move _ to _ element _ with _ offset(to _ element=element,xoffset=track 22,yoffset=y-445).执行()
#间隔时间也通过随机函数来获得,间隔不能太快,否则会被认为是程序执行
time.sleep(random.randint(10,50)/100)
打印(track_string)
#xoffset=21,本质就是向后退一格。这里退了5格是因为圆球的位置和滑动条的左边缘有5格的距离
动作链(驱动程序)。move _ to _ element _ with _ offset(to _ element=element,xoffset=21,yoffset=y-445).执行()
时间。睡眠(0.1)
动作链(驱动程序)。move _ to _ element _ with _ offset(to _ element=element,xoffset=21,yoffset=y-445).执行()
时间。睡眠(0.1)
动作链(驱动程序)。move _ to _ element _ with _ offset(to _ element=element,xoffset=21,yoffset=y-445).执行()
时间。睡眠(0.1)
动作链(驱动程序)。move _ to _ element _ with _ offset(to _ element=element,xoffset=21,yoffset=y-445).执行()
时间。睡眠(0.1)
动作链(驱动程序)。move _ to _ element _ with _ offset(to _ element=element,xoffset=21,yoffset=y-445).执行()
打印('第三步,释放鼠标)
#释放鼠标
动作链(驱动程序)。release(on_element=element).执行()
时间。睡眠(3)
#点击验证
#提交=驱动程序。find _ element _ by _ XPath('//div[@ class=' gt _ Ajax _ tip success ']')
#打印(提交。位置)
#时间。睡眠(5)
#关闭浏览器,为了演示方便,暂时注释掉。
#driver.quit()
#主函数入口
if __name__=='__main__ ':
及格
主()
总结
以上是边肖推出的python3破解geetest的滑块验证码功能。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。