目录

前言

目的

思路

代码实现

1. 搭建环境

2. 处理验证码

(关于软件ID的获取)

3. 处理登录信息

4. 获取价格表

完整代码

运行效果

总结


前言

当我们请求网页过于频繁时,或者进行登陆操作时,网页通常都会抛出人机验证,目的就是反爬,常见的有滑块验证、验证码、按顺序点击等形式...

那么遇到这种情况,我们如何通过程序自动验证从而跳过人工操作实现全自动化呢?这就涉及到了一个新的知识:图像识别。我们可以通过建立数据集、训练数据集、生成模型等机器学习方法来实现识别验证码图片的功能,但它特别耗时耗力,效率还底下,还没有普适性...除非是有大量的请求要求在此域名下,就可以训练一波数据集,否则真的很浪费时间精力,没有必要。

那么第二种方法应运而生:它就是借助已有的成熟验证码破Jie工具,本例以某网站(见评论区)为例。


目的

在本地配置该网站,利用它的验证码工具实现登录其官网并获取验证码类型与价格表。


思路

1. 搭建环境

2. 处理验证码

3. 处理登录信息

4. 获取价格表


代码实现

1. 搭建环境

访问超级鹰官网 ,按上图所示步骤下载超级鹰图像识别demo,解压到我们的项目文件夹。

demo代码修改后如下:(博主用Python 3.8)

#!/usr/bin/env python
# coding:utf-8import requests
from hashlib import md5class Chaojiying_Client(object):def __init__(self, username, password, soft_id):self.username = usernamepassword = password.encode('utf8')self.password = md5(password).hexdigest()self.soft_id = soft_idself.base_params = {'user': self.username,'pass2': self.password,'softid': self.soft_id,}self.headers = {'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}def PostPic(self, im, codetype):"""im: 图片字节codetype: 题目类型 参考 http://www.chaojiying.com/price.html"""params = {'codetype': codetype,}params.update(self.base_params)files = {'userfile': ('ccc.jpg', im)}r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files,headers=self.headers)return r.json()def PostPic_base64(self, base64_str, codetype):"""im: 图片字节codetype: 题目类型 参考 http://www.chaojiying.com/price.html"""params = {'codetype': codetype,'file_base64': base64_str}params.update(self.base_params)r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, headers=self.headers)return r.json()def ReportError(self, im_id):"""im_id:报错题目的图片ID"""params = {'id': im_id,}params.update(self.base_params)r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)return r.json()if __name__ == '__main__':# 用户中心>>软件ID 生成一个替换 96001chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '96001')# 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//im = open('a.jpg', 'rb').read()# 1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()print(chaojiying.PostPic(im, 1902))# print chaojiying.PostPic(base64_str, 1902)  #此处为传入 base64代码

只需要修改main函数部分的print函数的括号与部分缩进问题即可,还是简单的。

2. 处理验证码

我们把超级鹰demo中提供的接口导入项目中,在这个接口上进行操作。

首先照常导包进行参数配置

from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from chaojiying import Chaojiying_Clientimport time# 准备好参数配置
opt = Options()
opt.add_experimental_option('detach', True)
opt.add_argument('--start-maximized')  # 浏览器窗口最大web = Chrome(options=opt)  # 把参数配置设置到浏览器中web.get("见评论区")

下面处理验证码,用screenshot_as_png方法拿到验证码截图,将账号密码和软件ID传入Client

(关于软件ID的获取)

用户登录以后需要在用户中心软件ID选项进行创建,点击“生成一个软件ID”按钮,软件名称随便起,然后留表中就会出现一条信息,其中包含软件ID。它的目的就是为了统计某个软件ID的积分使用情况。

扫码关注他的微信公众号可以领1000积分,我们用来做测试已经够用

最后用PostPic接口传送验证码截图和验证类型,验证类型需要在官网价格表查询,我们只需要识别四位字母数字,所以参数传1902

然后返回识别完成的验证码结果,是一个字典形式,我们只需要获取pic_str属性所包含的内容,使用字典的get('key')方法,将想要的属性输入就能得到对应的值。我们用get('pic_str')

# 处理验证码
img = web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/div/img').screenshot_as_png
# TODO:需要修改下面的用户名、密码、软件ID
chaojiying = Chaojiying_Client('username', 'password', 'softID')
dic = chaojiying.PostPic(img, 1902)
veri_code = dic.get('pic_str')

3. 处理登录信息

# 向页面中填入用户名, 密码, 验证码
# TODO:需要修改下面的用户名、密码
web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input').send_keys("username")
web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input').send_keys("password")
web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/p[3]/input').send_keys(veri_code)

这个就容易多了,直接XPath找文本框,send_keys传输内容 ,把信息塞进去。

4. 获取价格表

# 点击登录
web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input').click()# 打开价格体系页面
web.find_element(By.XPATH, '/html/body/div[2]/div/ul/li[4]/a').click()
print(web.title)for i in range(1, 7):print('================================')print(web.find_element(By.XPATH, f'/html/body/section[2]/section/section[2]/table[{i}]').text)

最后一步,点击登录,打开价格体系页面,按顺序把6个价格表依次打印即可。


完整代码

# 1. 图像识别
# 2. 选择互联网上成熟的验证码破解工具(超级鹰)from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from chaojiying import Chaojiying_Clientimport time# 准备好参数配置
opt = Options()
opt.add_experimental_option('detach', True)
opt.add_argument('--start-maximized')  # 浏览器窗口最大web = Chrome(options=opt)  # 把参数配置设置到浏览器中web.get("见评论区")# 处理验证码
img = web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/div/img').screenshot_as_png# TODO:填入自己的用户名(username)、密码(password)、软件ID(softID)
chaojiying = Chaojiying_Client('username', 'password', 'softID')dic = chaojiying.PostPic(img, 1902)
veri_code = dic.get('pic_str')# TODO:填入自己的用户名(username)、密码(password)
# 向页面中填入用户名, 密码, 验证码
web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input').send_keys("username")
web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input').send_keys("password")
web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/p[3]/input').send_keys(veri_code)time.sleep(3)# 点击登录
web.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input').click()# 打开价格体系页面
web.find_element(By.XPATH, '/html/body/div[2]/div/ul/li[4]/a').click()
print(web.title)for i in range(1, 7):print('================================')print(web.find_element(By.XPATH, f'/html/body/section[2]/section/section[2]/table[{i}]').text)

运行效果


总结

我们认识了超级鹰这个处理验证码的工具,并用它自己处理了自己的验证码并用selenium获取了他的价格表,综合锻炼了一下我们的selenium模块。

27. 处理网站验证码:处理网站登录验证码(selenium+破解工具)相关推荐

  1. php实现登录验证码_PHP实现登录验证码功能

    本篇文章主要介绍PHP如何编写登录验证码的功能,感兴趣的朋友参考下,希望对大家有所帮助. 在最顶端声明函数 session_start(); 告诉服务器我们要用这个函数的功能.session_star ...

  2. java 登录验证码_java实现登录验证码

    本文实例为大家分享了java实现登录验证码的具体代码,供大家参考,具体内容如下 1.ValidateCode.java import java.awt.Color; import java.awt.F ...

  3. php登录调用验证码,PHP编写登录验证码功能 附调用方法

    本文实例为大家分享了一个PHP写的登录验证码功能,供大家参考,具体内容如下 ShowKey.php<?php session_start(); //设置COOKIE或Session functi ...

  4. 使用C#登录带验证码的网站

    我在上一篇文章中已经讲解了一般网站的登录原来和C#的登录实现,很多人问到对于使用了验证码的网站该怎么办,这里我就讲讲验证码的原理和对应的登录方法. 验证码的由来 几年前,大部分网站.论坛之类的是没有验 ...

  5. HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)

    HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站) 可以使用 Visual Sniffer(百度搜索) 来捕捉提交的数据信息: 1. 访问你需要站外提交的页面,比如 CSDN ...

  6. python 登陆网站图片验证,用python登录带弱图片验证码的网站

    上一篇介绍了使用python模拟登陆网站,但是登陆的网站都是直接输入账号及密码进行登陆,现在很多网站为了加强用户安全性和提高反爬虫机制都会有包括字符.图片.手机验证等等各式各样的验证码.图片验证码就是 ...

  7. python实现网站的自动登录(selenium实现,带验证码识别)

    python实现网站自动登录(selenium实现,带验证码识别) 一.前言 这是鄙人写的第一篇博客,旨在总结一下近期所学,本文通过selenium工具实现工作所用网站的自动登录,下图为网站登录界面. ...

  8. 常见的网站登录验证码种类及其解决办法

    在爬虫开发时,大家经常会遇到验证码识别,在网站中加入验证码的目的是加强用户安全性和提高反爬虫机制,有效防止对某一特定注册用户用特定程序暴力破解的方式不断地进行登录尝试.在此为大家介绍一下验证码的种类. ...

  9. 2019-03-20 Python爬取需要登录的有验证码的网站

    当你向验证码发起请求的时候,就有session了,记录下这次session 因为每当你请求一次验证码 或者 请求一次登录首页,验证码都在变动 验证码的链接可能不是固定的,可能需要GET/POST请求, ...

最新文章

  1. python查询缺失值所在位置使用scipy_python – 使用缺失值计算scipy中的成对距离
  2. 盘一盘 2021 年程序员们喜欢的网站数据
  3. Google图嵌入工业界最新大招,高效解决训练大规模深度图卷积神经网络问题
  4. nginx+uwsgi+django1.6 配置过程
  5. Github 本周最热的 10 款「机器学习」开源项目 | PaperDaily #27
  6. Andros系列排爆机器人原理_中国製造2025系列M之二:高档数控机床和机器人
  7. Magento 安装教程
  8. 持续集成工具集之三 Jenkins配置
  9. jQuery dataTables四种数据来源[转]-原文地址:http://xqqing79.iteye.com/blog/1219425
  10. 笔记-JavaWeb学习之旅19
  11. 《魔兽世界插件》教程---21点扑克游戏 Blackjack
  12. nodejs模块hashmap
  13. 阿里云centos远程连接mysql
  14. VBXtraLib 1.0 下载
  15. 文本转语音的接口(开放免费)
  16. 估值20亿美元 快狗打车将成“货运第一股”?
  17. K60的FTM的PWM、输入捕获、正交解码
  18. gred-cam 的tensorflow实现 热力图
  19. MVC 音乐商店 第 7 部分: 会员资格和授权
  20. 【精益生产】精益知识大全

热门文章

  1. 【笔记】蚂蚁金服公开基于笔画的中文词向量算法
  2. 自然语言处理算法之cw2vec理论及其实现(基于汉字笔画)
  3. python全栈开发百度云_Python全栈开发9期视频
  4. 永恒的圣洁 亚丁三怙主神山
  5. 加密解密算法之RC4
  6. c语言窗口皮肤,MFC 界面美化 Skinmagic
  7. md5 加盐原理和常用的加盐方法
  8. 如何用VCS+Verdi仿真Xilinx IP
  9. Vue引入第三方Element UI 组件
  10. 6.12C++:继承基类的构造函数、单继承的构造函数、多继承的构造函数、派生类复制构造函数、派生类的析构函数