爬虫通过验证码
一、验证码
验证码:全自动区分计算机和人类的图灵测试
常见验证码分类:
1、汉字验证码:

2、数字 + 字母验证码:

3、算术验证码:

4、问答式验证码:

找不到,这是唯一样图
5、坐标型验证码:

6、九宫格验证码:

7、滑块验证码:

8、旋转验证码(蘑菇街):

9、语音验证码
10、短信验证码
二、使用selenium手动打码
selenium配置ie浏览器教程:https://www.cnblogs.com/misswjr/p/9453566.html
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait # 显示等待对象
from selenium.webdriver.support import expected_conditions as EC # 【某些条件为止】
from selenium.webdriver.common.by import By # 帮我们找【某个页面元素】--定义【定位器】的主要东西
def open():
'''
打开链接输入发票信息
:return:
'''
# 1请求url
driver.get('https://inv-veri.chinatax.gov.cn/')
# 2输入
# 技术点:使用显示等待做输入。
# 发票代码
wait.until(EC.presence_of_element_located((By.ID, 'fpdm'))).send_keys('044031800311')
# 发票号码
wait.until(EC.presence_of_element_located((By.ID, 'fphm'))).send_keys('08744657')
# 开票日期
wait.until(EC.presence_of_element_located((By.ID, 'kprq'))).send_keys('20191105')
# 校验码
wait.until(EC.presence_of_element_located((By.ID, 'kjje'))).send_keys('859257')
def main():
# 1、输入发票信息
open()
# 2、点击图片加载验证码
wait.until(EC.presence_of_element_located((By.XPATH, '//td[@id="imgarea"]/div/a'))).click()
# 技术点二
yzm = input('请输入验证码') # 阻塞
# 3、填入进去yzm
wait.until(EC.presence_of_element_located((By.ID, 'yzm'))).send_keys(yzm)
# 4、点击checkfp
wait.until(EC.element_to_be_clickable((By.ID, 'checkfp'))).click()
if __name__ == '__main__':
driver = webdriver.Ie()
# 1、显示等待的对象
# driver:等待对象监听哪个浏览器
# 20:最大等待时长
wait = WebDriverWait(driver, 20)
main()
三、打码平台
程序将验证码传给打码平台的识别接口,打码平台将验证码发给后端的“佣工”进行识别,并获取识别结果。这样基于此类的人工打码平台,即可实现程序的自动化
超级鹰打码平台: http://www.chaojiying.com/
参照文档调用接口:
import hashlib
import requests
class Chaojiying(object):
def __init__(self, user, password, soft_id='903750'):
self.base_data = {
'user': user,
'pass2': str(hashlib.md5(bytes(password, encoding='utf-8')).hexdigest()),
'softid': soft_id,
}
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
'Connection': 'keep-alive',
}
def post_img(self, im, code_type):
'''
调用web接口,获取验证码图片内容
:param im: 图片的二进制流
:param code_type:验证码类型
:return:
'''
base_url = 'http://upload.chaojiying.net/Upload/Processing.php'
data = {
'codetype': code_type,
# 'file_base64':base64.b64decode(im),
}
files = {
'userfile': ('ccc.jpg', im),
}
self.base_data.update(data)
response = requests.post(base_url, data=self.base_data, headers=self.headers, files=files)
# print(response.json())
return response.json()['pic_str']
def post_error(self, pic_id):
'''
提交错误,返回题分接口
:param pic_id: 图片id,从打码平台返回的接口中获取。
:return:
'''
base_url

本文介绍了爬虫如何应对验证码的挑战,包括使用selenium手动打码、接入打码平台以及在RPA项目中验证发票真伪。详细讲解了滑动验证码的处理策略,如豆瓣和博客园登录的案例分析。
最低0.47元/天 解锁文章
656

被折叠的 条评论
为什么被折叠?



