yidun.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import json
  2. import time
  3. import requests
  4. import re
  5. from bs4 import BeautifulSoup
  6. import execjs
  7. from log import PPLogger
  8. class YiDun():
  9. def __init__(self):
  10. self.logger = PPLogger(name='yidun_verify')
  11. self.logger.setup_logger()
  12. def verify(self, session, url1):
  13. try:
  14. with open('./verify/yidun.js', 'r', encoding='utf8') as f:
  15. jscode = f.read()
  16. self.logger.info('yidun-verify')
  17. # session = requests.Session()
  18. headers = {
  19. "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",
  20. "accept-encoding": "gzip, deflate, br",
  21. "accept-language": "zh-CN,zh;q=0.9",
  22. "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
  23. }
  24. # 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'
  25. res1 = session.get(url1, headers=headers)
  26. soup1 = BeautifulSoup(res1.text, 'lxml')
  27. serialid = soup1.find('input', attrs={'id': "serialId"}).attrs['value']
  28. sign = soup1.find('input', attrs={'id': "sign"}).attrs['value']
  29. url = soup1.find('input', attrs={'id': "url"}).attrs['value']
  30. # print(url)
  31. url2 = f'https://callback.58.com/antibot/yidun/register.do?t={int(time.time() * 1000)}'
  32. data2 = {
  33. "serialId": serialid,
  34. "code": "300",
  35. "sign": sign,
  36. "url": url,
  37. "namespace": "fangchan_business_pc"
  38. }
  39. headers2 = {
  40. "accept": "*/*",
  41. "accept-encoding": "gzip, deflate, br",
  42. "accept-language": "zh-CN,zh;q=0.9",
  43. "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
  44. "origin": "https://callback.58.com",
  45. "referer": url1,
  46. "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36",
  47. "x-requested-with": "XMLHttpRequest"
  48. }
  49. res2 = session.post(url2, headers=headers2, data=data2)
  50. self.logger.info(res2.text)
  51. res2_data = res2.json()['data']
  52. url3 = 'https://c.dun.163.com/api/v2/getconf'
  53. params3 = {
  54. "referer": "https://callback.58.com/antibot/verifycode",
  55. "zoneId": "",
  56. "id": res2_data,
  57. "ipv6": "false",
  58. "runEnv": "10",
  59. "iv": "4",
  60. "loadVersion": "2.4.0",
  61. "lang": "zh-CN",
  62. "callback": "__JSONP_xsv67jt_0"
  63. }
  64. header3 = {
  65. "Accept": "*/*",
  66. "Accept-Encoding": "gzip, deflate, br",
  67. "Accept-Language": "zh-CN,zh;q=0.9",
  68. "Connection": "keep-alive",
  69. "Host": "c.dun.163.com",
  70. "Referer": "https://callback.58.com/",
  71. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
  72. }
  73. res3 = session.get(url3, headers=header3, params=params3)
  74. res3_json = json.loads(re.search('\{.*\}', res3.text).group())
  75. ac_token = res3_json['data']['ac']['token']
  76. dt = res3_json['data']['dt']
  77. url4 = 'https://c.dun.163.com/api/v3/get'
  78. fp = execjs.compile(jscode).call('get_fp')
  79. cb = execjs.compile(jscode).call('get_cb')
  80. params4 = {
  81. "referer": "https://callback.58.com/antibot/verifycode",
  82. "zoneId": "CN31",
  83. "dt": dt,
  84. "id": res2_data,
  85. "fp": fp,
  86. "https": "true",
  87. "type": "undefined",
  88. "width": "",
  89. "sizeType": "undefined",
  90. "version": "2.27.2",
  91. "dpr": "1",
  92. "dev": "1",
  93. "cb": cb,
  94. "acToken": "",
  95. "ipv6": "false",
  96. "runEnv": "10",
  97. "group": "",
  98. "scene": "",
  99. "sdkVersion": "undefined",
  100. "iv": "4",
  101. "smsVersion": "v3",
  102. "callback": "__JSONP_65el8vu_0"
  103. }
  104. res4 = session.get(url4, headers=header3, params=params4)
  105. res4_json = json.loads(re.search('\{.*\}', res4.text).group())
  106. token = res4_json['data']['token']
  107. url5 = 'https://c.dun.163.com/api/v3/check'
  108. headers5 = {
  109. "Accept": "*/*",
  110. "Accept-Encoding": "gzip, deflate, br",
  111. "Accept-Language": "zh-CN,zh;q=0.9",
  112. "Connection": "keep-alive",
  113. "Host": "c.dun.163.com",
  114. "Referer": "https://callback.58.com/",
  115. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
  116. }
  117. data = execjs.compile(jscode).call('get_data', token)
  118. params5 = {
  119. "referer": "https://callback.58.com/antibot/verifycode",
  120. "zoneId": "CN31",
  121. "dt": dt,
  122. "id": res2_data,
  123. "version": "2.27.2",
  124. "cb": cb,
  125. "extraData": "",
  126. "bf": "0",
  127. "runEnv": "10",
  128. "sdkVersion": "undefined",
  129. "iv": "4",
  130. "token": token,
  131. "type": "5",
  132. "width": "240",
  133. "data": data,
  134. "callback": '__JSONP_4oixuod_1'
  135. }
  136. res5 = session.get(url5, headers=headers5, params=params5)
  137. res5_json = json.loads(re.search('\{.*\}', res5.text).group())
  138. validate = res5_json['data']['validate']
  139. url6 = 'https://callback.58.com/antibot/yidun/checkcode.do'
  140. headers6 = {
  141. "accept": "*/*",
  142. "accept-encoding": "gzip, deflate, br",
  143. "accept-language": "zh-CN,zh;q=0.9",
  144. "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
  145. "origin": "https://callback.58.com",
  146. "pragma": "no-cache",
  147. "referer": url1,
  148. "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
  149. }
  150. validate6 = execjs.compile(jscode).call('get_validate', fp, validate)
  151. data6 = {
  152. "namespace": "fangchan_business_pc",
  153. "url": url,
  154. "serialId": serialid,
  155. "validate": validate6
  156. }
  157. res6 = session.post(url6, headers=headers6, data=data6)
  158. self.logger.info(res6.text)
  159. url7 = res6.json()['msg']
  160. session.get(url7, headers=headers)
  161. except Exception as e:
  162. self.logger.error(e)
  163. return session