import json import time import requests import re from bs4 import BeautifulSoup import execjs from log import PPLogger class YiDun(): def __init__(self): self.logger = PPLogger(name='yidun_verify') self.logger.setup_logger() def verify(self, session, url1): try: with open('./verify/yidun.js', 'r', encoding='utf8') as f: jscode = f.read() self.logger.info('yidun-verify') # session = requests.Session() headers = { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding": "gzip, deflate, br", "accept-language": "zh-CN,zh;q=0.9", "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36" } # url1 = 'https://callback.58.com/antibot/verifycode?serialId=d7026297c2c26f8550dd61e011b05a13_e3df224043e941b197ac36b476201772&code=300&sign=5de1e434335d349a2a2bc187ff886a4f&namespace=fangchan_business_pc&url=https%253A%252F%252Fqd.58.com%252Flicang%252Fshangpucz%252Fpn1%252F%253Farea%253D100_300%2526huansuanyue%253D0_10000' res1 = session.get(url1, headers=headers) soup1 = BeautifulSoup(res1.text, 'lxml') serialid = soup1.find('input', attrs={'id': "serialId"}).attrs['value'] sign = soup1.find('input', attrs={'id': "sign"}).attrs['value'] url = soup1.find('input', attrs={'id': "url"}).attrs['value'] # print(url) url2 = f'https://callback.58.com/antibot/yidun/register.do?t={int(time.time() * 1000)}' data2 = { "serialId": serialid, "code": "300", "sign": sign, "url": url, "namespace": "fangchan_business_pc" } headers2 = { "accept": "*/*", "accept-encoding": "gzip, deflate, br", "accept-language": "zh-CN,zh;q=0.9", "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "origin": "https://callback.58.com", "referer": url1, "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36", "x-requested-with": "XMLHttpRequest" } res2 = session.post(url2, headers=headers2, data=data2) self.logger.info(res2.text) res2_data = res2.json()['data'] url3 = 'https://c.dun.163.com/api/v2/getconf' params3 = { "referer": "https://callback.58.com/antibot/verifycode", "zoneId": "", "id": res2_data, "ipv6": "false", "runEnv": "10", "iv": "4", "loadVersion": "2.4.0", "lang": "zh-CN", "callback": "__JSONP_xsv67jt_0" } header3 = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "keep-alive", "Host": "c.dun.163.com", "Referer": "https://callback.58.com/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36" } res3 = session.get(url3, headers=header3, params=params3) res3_json = json.loads(re.search('\{.*\}', res3.text).group()) ac_token = res3_json['data']['ac']['token'] dt = res3_json['data']['dt'] url4 = 'https://c.dun.163.com/api/v3/get' fp = execjs.compile(jscode).call('get_fp') cb = execjs.compile(jscode).call('get_cb') params4 = { "referer": "https://callback.58.com/antibot/verifycode", "zoneId": "CN31", "dt": dt, "id": res2_data, "fp": fp, "https": "true", "type": "undefined", "width": "", "sizeType": "undefined", "version": "2.27.2", "dpr": "1", "dev": "1", "cb": cb, "acToken": "", "ipv6": "false", "runEnv": "10", "group": "", "scene": "", "sdkVersion": "undefined", "iv": "4", "smsVersion": "v3", "callback": "__JSONP_65el8vu_0" } res4 = session.get(url4, headers=header3, params=params4) res4_json = json.loads(re.search('\{.*\}', res4.text).group()) token = res4_json['data']['token'] url5 = 'https://c.dun.163.com/api/v3/check' headers5 = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "keep-alive", "Host": "c.dun.163.com", "Referer": "https://callback.58.com/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36" } data = execjs.compile(jscode).call('get_data', token) params5 = { "referer": "https://callback.58.com/antibot/verifycode", "zoneId": "CN31", "dt": dt, "id": res2_data, "version": "2.27.2", "cb": cb, "extraData": "", "bf": "0", "runEnv": "10", "sdkVersion": "undefined", "iv": "4", "token": token, "type": "5", "width": "240", "data": data, "callback": '__JSONP_4oixuod_1' } res5 = session.get(url5, headers=headers5, params=params5) res5_json = json.loads(re.search('\{.*\}', res5.text).group()) validate = res5_json['data']['validate'] url6 = 'https://callback.58.com/antibot/yidun/checkcode.do' headers6 = { "accept": "*/*", "accept-encoding": "gzip, deflate, br", "accept-language": "zh-CN,zh;q=0.9", "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "origin": "https://callback.58.com", "pragma": "no-cache", "referer": url1, "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36" } validate6 = execjs.compile(jscode).call('get_validate', fp, validate) data6 = { "namespace": "fangchan_business_pc", "url": url, "serialId": serialid, "validate": validate6 } res6 = session.post(url6, headers=headers6, data=data6) self.logger.info(res6.text) url7 = res6.json()['msg'] session.get(url7, headers=headers) except Exception as e: self.logger.error(e) return session