赞
踩
在通过百度关键词搜索进行爬虫的过程中,会遇到进入百度安全验证页面的情况。随着访问次数的的增加,进入安全验证页面的概率也随之增大,且这种情况并不能通过请求头加入 Accept 和引入随机 UA 来解决(代理是否能解决这一问题未得到充分验证,以我的尝试来看并不能有效解决)。
在尝试过上述的几种方法来反“反爬”的过程中,发现一旦可以通过安全验证,在后续的爬虫过程中,可观察时间内并不会再次进入安全验证页面。既然“堵”不适合我解决这一问题,就只有利用“疏”的思路制定解决方案。
百度安全验证页面采用拖动滑块使页面中的图片角度为正确方向来判断是否为“自动程序”在控制浏览器。相较于一般的字符识别等验证方案具有一定的难度,直观表现在没有(或者几乎没有)现有的 API 供应商在提供这样的服务。
网络上现有的、基于图像处理或计算机视觉的解决方案主要分为传统方法和深度学习方法。传统方法通过对图像进行处理、建模来建立正确方向图像和不同角度图像的映射,再通过对图像进行哈希处理判定与页面上的图像最相似的图像,从而在映射关系中获得旋转角度。这种方法形成的“关系模型”会随着图库数量的增大而不断增大,且哈希编码来查找相似图像的方法鲁棒性较差。现有的基于深度学习的方法利用在 Google Street View dataset 训练的 RotNet 来预测图片旋转角度,经试验在类街景的测试图片上识别成功率较高。但由于缺乏百度安全验证页面中采用的人像、风景等多类样本,难以运用到实际使用中。除此以外,还有其他因素导致了利用该模型难以通过安全验证。
综上,在参考现有文章的基础上,总结出以下基于深度学习的方法:
目标:
识别图片角度,推算出对应滑动距离,模拟滑动。
实现:
2. 制作数据集:生成各个角度的图片,每个不同的图片均有360张不同角度的照片,标记正向图,根据现有图片名称序列计算不同角度照片相对于正向图片的相对角度,重新命名从而建立数据集;
性能:
推理快、预测准(普遍最多在三次验证中可通过,根据实际操作和 b 站视频来看,人为通过安全验证的难度也相对较大)
操作
python 开发可以参考 https://github.com/ShortCJL/RotateCode
java 开发可先将训练获得的模型进行转化
import torch import torchvision import torch.nn as nn model = # instance of your model model.load_state_dict(torch.load("your model.pth")["model_state_dict"]) # Switch the model to eval model model.eval() # An example input you would normally provide to your model's forward() method. example = torch.rand(1, 3, 128, 128) # Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing. traced_script_module = torch.jit.trace(model, example) # Save the TorchScript model traced_script_module.save("your model.pt")
之后,便可通过 DJL 加载模型并作出预测,并借助其他工具来操作浏览器实现验证(为不限制大家思路,在此不放出我的实现代码)。
代码
欢迎大家 star https://github.com/Tang1705/Baidu-Rot-Validate。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。