一、案例分析
① 案例网址:aHR0cHM6Ly9wYXRlbnRzY29wZTIud2lwby5pbnQvc2VhcmNoL3poL3NlYXJjaC5qc2Y=
② 反爬点:六宫格验证码/cookie反爬/时间强制等待/session数据强绑定,打开网址会先跳出验证码,大概点击至少2次才会到正常的页面,这个网站的反爬有点意思,不属于很难的js逆向,但是它的坑比较多,有时间的话大家可以练练手
① 打开网址首页,详情如果包含"请选出带有" 则代表验证码反爬弹出
② 如图6张验证码,对应的序号,校验通过就是传入正确的识别序号即可
③ 如果校验通过的话,session_cookie就有效了,同时从响应里面拿新的view_state值,由于cookie我们是通过session = requests.session()管理的,所以就暂时不用管了,它目前的cookie反爬改变暂都是从服务器set-cookie返回的
④ 如何识别六宫格验证码,我们可以把三种验证码的类别收集齐全(该案例样本比较少),然后并标注,最后通过比较相似度来识别验证码
⑤ 6宫格验证码,遍历6张验证码,到对应的文件夹图片进行对比,找出最相似的那张,即为识别结果
def get_yzm_num(img_text, img_content):
yzm_path = f"./wipo/{img_text}"
for pic_name in os.listdir(yzm_path):
ori_path = os.path.join(yzm_path, pic_name)
_image = Image.open(ori_path)
array1 = np.array(_image)
try:
_image = Image.open(BytesIO(img_content))
except Exception as err:
_image = Image.open(img_content)
array2 = np.array(_image)
# print("相似的点个数", pic_name, np.sum(array1 == array2))
if np.sum(array1 == array2) > 17000: # 判断两张图片相似
return True
① 列表页暂时没啥反爬,一次302跳转即可获得列表页数据
① 详情页有个反爬坑,如果没有访问css链接,则响应拿不到数据,如果每个链接中间没有强制时间等待,也会拿不到数据,这个问题的发现来源于调试的时候正常返回数据了,但是直接运行的时候又失败了,所以每次访问链接还得有个time.sleep
② 这里只请求详情页测试如下,第一次访问详情页也是跳两次验证码,然后再次访问详情页后并没有真正的数据,而是跳出验证码弹出载入中,我们在这个页面里面去拿css的文件链接,访问一次css链接,这个时候session的cookie才真正有效;然后再回到详情页就能拿到有效数据了
③ 除此以外,还有个坑在于如下,如果你直接请求文件这个详情的话,那么这个数据可能是上个详情的数据,所以数据还有个session强绑定,你必须先访问到它的详情默认页面然后才能其它页面的访问