Python 点击指定位置验证码破解的实现代码

来源:脚本之家  责任编辑:小易  

验证码就是用来阻止自动爬虫的

思路:

创建浏览器驱动对象

selenium中有截图的操作 使用save_screenshot方法保存图片 driver.save_screenshot("code.jpg")想觉得图片太大 剪辑图片可以使用PIL中的Image模块剪辑 img = Image.open("code.jpg")region = (10, 10, 100, 100)nimg = img.crop(region)nimg.sav

加载登录页面

训练ocr 让它识别验证码,不过太复杂的验证码识别不了。

等待页面加载完毕

1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻。本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的

切换到用户名和密码登录模式

Unsupported image object 估计是你的png内容不规范。。。 先规范下格式再用吧。 Image.open(r'F://work//test//python//222.png').save("222.png") img = Image.open("222.png") vcode = pytesseract.image_to_string(img)

输入手机号, 注意此处需要等待并获取输入框

抑郁,这实在是一个庞大又无法圈定的概念。它多多少少隐性在每个人的基因中,缠在全身骨髓,沉进想说话的牙床里。之前听说TED中有谈到抑郁。台上的人框住这个问题,说它更像是“爱的附属品”。想付出更多的爱而不知捷径。想获得更多的爱也无从开口。多几分偏执便要多几分致郁。记得10年前,自己曾亲眼目睹过一场跳楼事件。男孩子不过16岁,从楼上一跃而下,身体摔断没有了气息。中午人群涌入,好奇又不敢看。人言似虎。周遭的人有说他求爱而不得持刀砍人后又自杀,也有说是学业问题。七七八八张嘴巴指点着江山,画着葫芦。我印象里那时候自己看了他一眼,男生走的并不舒服。身体蜷瘫着,和刚来到这个世界的姿势没半点不同。前天看《一念无

输入密码

点击验证按钮

可是不知不觉间,小沈阳不在那么火爆了,作品数量也锐减,现在最受人们关注的应该是宋小宝一行人了吧!那么小沈阳为什么突然不火了呢?可能有一下几个原因:小沈阳的优势在于搞笑的长相及动作,还有他的不错的嗓音,小沈阳经常性的穿着跑偏的裙子,捏着别扭的兰花指表演,成为他的标志之一。高音确实很不错,而且能让人感动,这两点最大的优势被他抛弃,不在坚持自我特色的他逐渐失去了自己的标签。作为赵本山的弟子,他没有搞好和师傅的关系,赵本山说他成名之后开始膨胀,不知道努力学习,而是利用自己的名气来圈钱,不懂得可持续发展。大家都知道赵本山的影响力,搞坏和他的关系就等于自断后路。本山集团人才辈出,宋小宝,文松的火热逐渐取代

获取弹出验证图片

可以说真话吗!因为现在的女性已经没剩多少的魅力了!一切都是颜值,全部只有颜值,仿佛一碗再美味的菜,被说了一万句好话,就不会想吃她了!魅力是一种组合能力,相貌是辅助器,要是没有其她的欣赏点,辅助功能有个屁用呀!买工具首先考虑她能干嘛,相貌好在以前是很危险的,要是遇到个坏人,再说了,对于自拍视频,都是脸在动来动去,身材在晃荡,我会怀疑我的审美能力在倒退的。顺便说男人现在还是用才能来衡量的。以上的话重伤了美貌女性,我感到抱歉。其实我很喜欢美貌

使用超级鹰打码平台识别图形的坐标

中国人最大的毛病,就是对身边亲近的人太坏,对周遭陌生的人太好!男人在家发脾气在外面好说话,俗话说就是个“窝里横”,因为他是个没本事没担当的假男人。本人最看不得“窝里横”欺软怕硬的人。家人不跟他计较不是怕他,而是因为爱他,而他却不明白,只任性肆意的挥霍家人对他的爱,最后只能弄个众叛亲离的下场。曾经的上海滩大佬杜月笙说过:头等人,有本事,没脾气;二等人,有本事,有脾气;末等人,没本事,大脾气。这么看来,社会还是以末等人居多。是人就会有情绪,情绪的合理无害化的疏解对人的心理健康有益,情绪的任性和有害化疏解才是发脾气。说到底,发脾气是对自己无能的愤怒罢了!窝里横的男人骨子是自卑和怯懦的,男人要勇敢和自

获取到坐标信息, x,y坐标分别除以2; 由于电脑分辨率太过了, 是原来的两倍, 如果是普通分辨率可以除以2,直接用就可以了.

把鼠标移动到, 坐标点的位置进行点击

点击登录按钮

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver import ActionChains import time # 导入超级鹰 from chaojiying import chaojiying #根据系统,可能截图不成功,需要使用无头浏览,mac系统可以不设置 options=webdriver.ChromeOptions() options.headless=True driver=webdriver.Chrome(options=potions) driver.get('http://www.zhaopingou.com/signin') driver.find_element_by_class_name('li02').click() wait=WebDriverWait(driver,20,0.5) # 账号登录 login_phone=wait.until(EC.visibility_of_element_located((By.ID,'pwd_login_phone'))) login_phone.send_keys('17724035140') # 密码 driver.find_element_by_id('form_login_password').send_keys('961831740hzll') # 点击获取图片 captcha = wait.until(EC.visibility_of_element_located((By.XPATH, '//div[@class="phone_login_pwd"]//iframe[starts-with(@id, "captcha_widget")]'))) captcha.click() # 点击 # 保存图片(可以不保存) captcha_element = wait.until(EC.visibility_of_element_located((By.XPATH, '//body[@class="graybc"]//iframe[starts-with(@id, "captcha_frame")]'))) captcha_element.screenshot('zhaopingou.png') # 将图片转换为二进制 bytes_img=captcha_element.screenshot_as_png # print(bytes_img) result=chaojiying.post_pic(bytes_img,'9101') x,y=result['pic_str'].split(',') print(x,y) x=int(x) y=int(y) # ActionChains(driver).move_to_element_with_offset(bytes_img,x,y).click().perform() ActionChains(driver).move_to_element_with_offset(captcha_element, x, y).click().perform() time.sleep(2) driver.find_element_by_id('free_login_btn').click() print(driver.window_handles) driver.switch_to.window(driver.window_handles[0]) # time.sleep(5) driver.quit()

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

python 爬虫:手动输入验证码点击搜索

你的意思是现在“验证码的校验”和“搜索”看起来已经分开了,找不到关联点,对么?

能把你要爬的页面发上来么,我研究研究更多追问追答追问嗯嗯,对的,就是这个”http://www.tjcredit.gov.cn/xwqy/enterprise/index“,不知道怎么联系起来追答验证码请求的URI是

/xwqy/randomCode/generate?time=1463382727491

我提供一个思路

1 请求上面的URI 获得验证码

2 POST http://www.tjcredit.gov.cn/xwqy/randomCode/validCode?c=第一步获得的验证码,这里应该就会返回true

3 直接做search的请求

试试吧 不行再说追问试过了,返回true,之后,我search,输出结果。但是如果输错验证码,返回false,但是输出还是有结果,和上次输出相同。- -!追答输出的结果是你想要的么追问不是。。。输出的结果怎么弄都不会变,输错验证码,改变关键字,都不变。类似的网站http://www.jsgsj.gov.cn:58888/mini/netweb/SMLibrary.jsp。输出会一直是空...

用python破解带验证码密码

这个验证码的确简单,不过用tesseract ocr效果不太好。还不如自己用PIL开发一个类似的算法更准确。

用户名与密码要用字典,完全暴力破解是一个天文数字。不可行。不考虑封IP的前提下。你将常用的用户名都列出来。再找一个常用的密码字典做排列组合。

不过网站建设成这个样子,看来技术含量不高。也许它有其它的漏洞。不需要你去暴力破解。

python处理滑动验证码,除了调用chrome

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.common.action_chains import ActionChains

import PIL.Image as image

import time,re, random

import requests

try:

from StringIO import StringIO

except ImportError:

from io import StringIO

#爬虫模拟的浏览器头部信息

agent = 'Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0'

headers = {

'User-Agent': agent

}

# 根据位置对图片进行合并还原

# filename:图片

# location_list:图片位置

#内部两个图片处理函数的介绍

#crop函数带的参数为(起始点的横坐标,起始点的纵坐标,宽度,高度)

#paste函数的参数为(需要修改的图片,粘贴的起始点的横坐标,粘贴的起始点的纵坐标)

def get_merge_image(filename,location_list):

#打开图片文件

im = image.open(filename)

#创建新的图片,大小为260*116

new_im = image.new('RGB', (260,116))

im_list_upper=[]

im_list_down=[]

# 拷贝图片

for location in location_list:

#上面的图片

if location['y']==-58:

im_list_upper.append(im.crop((abs(location['x']),58,abs(location['x'])+10,166)))

#下面的图片

if location['y']==0:

im_list_down.append(im.crop((abs(location['x']),0,abs(location['x'])+10,58)))

new_im = image.new('RGB', (260,116))

x_offset = 0

#黏贴图片

for im in im_list_upper:

new_im.paste(im, (x_offset,0))

x_offset += im.size[0]

x_offset = 0

for im in im_list_down:

new_im.paste(im, (x_offset,58))

x_offset += im.size[0]

return new_im

#下载并还原图片

# driver:webdriver

# div:图片的div

def get_image(driver,div):

#找到图片所在的div

background_images=driver.find_elements_by_xpath(div)

location_list=[]

imageurl=''

#图片是被CSS按照位移的方式打乱的,我们需要找出这些位移,为后续还原做好准备

for background_image in background_images:

location={}

#在html里面解析出小图片的url地址,还有长高的数值

location['x']=int(re.findall("background-image: url\(\"(.*)\"\); background-position: (.*)px (.*)px;",background_image.get_attribute('style'))[0][1])

location['y']=int(re.findall("background-image: url\(\"(.*)\"\); background-position: (.*)px (.*)px;",background_image.get_attribute('style'))[0][2])

imageurl=re.findall("background-image: url\(\"(.*)\"\); background-position: (.*)px (.*)px;",background_image.get_attribute('style'))[0][0]

location_list.append(location)

#替换图片的后缀,获得图片的URL

imageurl=imageurl.replace("webp","jpg")

#获得图片的名字

imageName = imageurl.split('/')[-1]

#获得图片

session = requests.session()

r = session.get(imageurl, headers = headers, verify = False)

#下载图片

with open(imageName, 'wb') as f:

f.write(r.content)

f.close()

#重新合并还原图片

image=get_merge_image(imageName, location_list)

return image

#对比RGB值

def is_similar(image1,image2,x,y):

pass

#获取指定位置的RGB值

pixel1=image1.getpixel((x,y))

pixel2=image2.getpixel((x,y))

for i in range(0,3):

# 如果相差超过50则就认为找到了缺口的位置

if abs(pixel1[i]-pixel2[i])>=50:

return False

return True

#计算缺口的位置

def get_diff_location(image1,image2):

i=0

# 两张原始图的大小都是相同的260*116

# 那就通过两个for循环依次对比每个像素点的RGB值

# 如果相差超过50则就认为找到了缺口的位置

for i in range(0,260):

for j in range(0,116):

if is_similar(image1,image2,i,j)==False:

return i

#根据缺口的位置模拟x轴移动的轨迹

def get_track(length):

pass

list=[]

#间隔通过随机范围函数来获得,每次移动一步或者两步

x=random.randint(1,3)

#生成轨迹并保存到list内

while length-x>=5:

list.append(x)

length=length-x

x=random.randint(1,3)

#最后五步都是一步步移动

for i in range(length):

list.append(1)

return list

#滑动验证码破解程序

def main():

#打开火狐浏览器

driver = webdriver.Firefox()

#用火狐浏览器打开网页

driver.get("htest.com/exp_embed")

#等待页面的上元素刷新出来

WebDriverWait(driver, 30).until(lambda the_driver: the_driver.find_element_by_xpath("//div[@class='gt_slider_knob gt_show']").is_displayed())

WebDriverWait(driver, 30).until(lambda the_driver: the_driver.find_element_by_xpath("//div[@class='gt_cut_bg gt_show']").is_displayed())

WebDriverWait(driver, 30).until(lambda the_driver: the_driver.find_element_by_xpath("//div[@class='gt_cut_fullbg gt_show']").is_displayed())

#下载图片

image1=get_image(driver, "//div[@class='gt_cut_bg gt_show']/div")

image2=get_image(driver, "//div[@class='gt_cut_fullbg gt_show']/div")

#计算缺口位置

loc=get_diff_location(image1, 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 ("第一步,点击元素")

ActionChains(driver).click_and_hold(on_element=element).perform()

time.sleep(0.15)

print ("第二步,拖动元素")

track_string = ""

for track in track_list:

#不能移动太快,否则会被认为是程序执行

track_string = track_string + "{%d,%d}," % (track, y - 445)

#xoffset=track+22:这里的移动位置的值是相对于滑动圆球左上角的相对值,而轨迹变量里的是圆球的中心点,所以要加上圆球长度的一半。

#yoffset=y-445:这里也是一样的。不过要注意的是不同的浏览器渲染出来的结果是不一样的,要保证最终的计算后的值是22,也就是圆球高度的一半

ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=track+22, yoffset=y-445).perform()

#间隔时间也通过随机函数来获得,间隔不能太快,否则会被认为是程序执行

time.sleep(random.randint(10,50)/100)

print (track_string)

#xoffset=21,本质就是向后退一格。这里退了5格是因为圆球的位置和滑动条的左边缘有5格的距离

ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()

time.sleep(0.1)

ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()

time.sleep(0.1)

ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()

time.sleep(0.1)

ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()

time.sleep(0.1)

ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=21, yoffset=y-445).perform()

print ("第三步,释放鼠标")

#释放鼠标

ActionChains(driver).release(on_element=element).perform()

time.sleep(3)

#点击验证

# submit = driver.find_element_by_xpath("//div[@class='gt_ajax_tip success']")

# print(submit.location)

# time.sleep(5)

#关闭浏览器,为了演示方便,暂时注释掉.

#driver.quit()

#主函数入口

if __name__ == '__main__':

pass

main()追问方便把文件发给我吗?

python高手请看,有关带验证码的密码及用户名破解

验证码这个不是很好弄,需要写验证码识别,或者你可以半自动。这个一般不好弄的哦~呵呵

首先你可以百度一些管理员用户名、密码字典,学会用chrome 的F12进行调试跟踪,查看网络请求。

写代码就很容易,用urllib2 urllib组合模拟post、get请求即可。或者简单点用requests这个库。

暴力破解需要考虑封你IP问题,所以你得先试验是否需要代理。

1 获取到登录页html源码

2 字典填写用户名和密码

3 根据验证码地址获取验证码图片,保存到本地。验证码识别或者手工输入

while 循环即可

如果可以,可以写多线程、多进程等等,自由发挥

python 验证码加时间戳的功能是怎么实现的

验证码要成功显示就必须要有一个验证码生成器,所以就要写一个验证码生成器。我在app中新建了一个py文件check_coed.py文件,这就是验证码生成器。代码如下

import random

from PIL import Image, ImageDraw, ImageFont, ImageFilter

_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z

_upper_cases = _letter_cases.upper() # 大写字母

_numbers = ''.join(map(str, range(3, 10))) # 数字

init_chars = ''.join((_letter_cases, _upper_cases, _numbers))

def create_validate_code(size=(120, 30),

chars=init_chars,

img_type="GIF",

mode="RGB",

bg_color=(255, 255, 255),

fg_color=(0, 0, 255),

font_size=18,

font_type="Monaco.ttf",

length=4,

draw_lines=True,

n_line=(1, 2),

draw_points=True,

point_chance=2):

"""

@todo: 生成验证码图片

@param size: 图片的大小,格式(宽,高),默认为(120, 30)

@param chars: 允许的字符集合,格式字符串

@param img_type: 图片保存的格式,默认为GIF,可选的为GIF,JPEG,TIFF,PNG

@param mode: 图片模式,默认为RGB

@param bg_color: 背景颜色,默认为白色

@param fg_color: 前景色,验证码字符颜色,默认为蓝色#0000FF

@param font_size: 验证码字体大小

@param font_type: 验证码字体,默认为 ae_AlArabiya.ttf

@param length: 验证码字符个数

@param draw_lines: 是否划干扰线

@param n_lines: 干扰线的条数范围,格式元组,默认为(1, 2),只有draw_lines为True时有效

@param draw_points: 是否画干扰点

@param point_chance: 干扰点出现的概率,大小范围[0, 100]

@return: [0]: PIL Image实例

@return: [1]: 验证码图片中的字符串

"""

width, height = size # 宽高

# 创建图形

img = Image.new(mode, size, bg_color)

draw = ImageDraw.Draw(img) # 创建画笔

def get_chars():

"""生成给定长度的字符串,返回列表格式"""

return random.sample(chars, length)

def create_lines():

"""绘制干扰线"""

line_num = random.randint(*n_line) # 干扰线条数

for i in range(line_num):

# 起始点

begin = (random.randint(0, size[0]), random.randint(0, size[1]))

# 结束点

end = (random.randint(0, size[0]), random.randint(0, size[1]))

draw.line([begin, end], fill=(0, 0, 0))

def create_points():

"""绘制干扰点"""

chance = min(100, max(0, int(point_chance))) # 大小*在[0, 100]

for w in range(width):

for h in range(height):

tmp = random.randint(0, 100)

if tmp > 100 - chance:

draw.point((w, h), fill=(0, 0, 0))

def create_strs():

"""绘制验证码字符"""

c_chars = get_chars()

strs = ' %s ' % ' '.join(c_chars) # 每个字符前后以空格隔开

# font = ImageFont.truetype(font_type, font_size)

font = ImageFont.load_default().font

font_width, font_height = font.getsize(strs)

draw.text(((width - font_width) / 3, (height - font_height) / 3),

strs, font=font, fill=fg_color)

return ''.join(c_chars)

if draw_lines:

create_lines()

if draw_points:

create_points()

strs = create_strs()

# 图形扭曲参数

params = [1 - float(random.randint(1, 2)) / 100,

0, 0, 0, 1 - float(random.randint(1, 10)) / 100, float(random.randint(1, 2)) / 500, 0.001, float(random.randint(1, 2)) / 500 ]

img = img.transform(size, Image.PERSPECTIVE, params) # 创建扭曲

img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强(阈值更大)

  • 本文相关:
  • python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
  • python3 破解 geetest(极验)的滑块验证码功能
  • python实现破解12306图片验证码的方法分析
  • 利用python破解验证码实例详解
  • linux中如何使用python3获取ip地址
  • 总结python中pass的作用
  • django 生成登陆验证码代码分享
  • python编程实现的简单神经网络算法示例
  • python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹
  • python通过pip更新所有已安装的包实现方法
  • 解决pandas 作图无法显示中文的问题
  • 用python识别人脸,人种等各种信息
  • 使用python爬虫获取黄金价格的核心代码
  • pandas 如何分割字符的实现方法
  • python 爬虫:手动输入验证码点击搜索
  • 用python破解带验证码密码
  • python处理滑动验证码,除了调用chrome
  • python高手请看,有关带验证码的密码及用户名破解
  • python 验证码加时间戳的功能是怎么实现的
  • 小白求问:python怎么实现自动登录需要手动点击发...
  • selenium+python自动化测试如何识别获取网页中的验...
  • 怎么用Python抓js生成的内容,还要绕过验证码
  • 如何利用Python做简单的验证码识别
  • 使用Python进行验证码识别案例无法验证通过,SOS
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved