can exchange cookies

This commit is contained in:
2024-03-16 16:56:23 +01:00
parent 7bf7a2642a
commit 68f86a0485
8 changed files with 284 additions and 210 deletions
+169 -142
View File
@@ -1,6 +1,10 @@
from typing import Any
from dataclasses import dataclass
import json import json
import random
import time
import urllib
from dataclasses import dataclass
import jsonpickle
@dataclass @dataclass
@@ -131,144 +135,167 @@ class JsDataPojo:
wwl: bool wwl: bool
jset: int jset: int
@staticmethod def __init__(self, glrd, glvd, hc, br_oh, ua, br_ow, br_h, br_w, rs_h, rs_w, rs_cd, ars_h, ars_w, plg, eva, plu,
def from_dict(obj: Any) -> 'JsDataPojo': vnd, pr, ts_mtp, dvm):
_opts = str(obj.get("opts")) self.opts = "endpoint,ajaxListenerPath"
_ttst = int(obj.get("ttst")) self.ttst = random.randint(38, 94)
_ifov = False self.ifov = False
_hc = int(obj.get("hc")) self.hc = hc
_br_oh = int(obj.get("br_oh")) self.br_oh = br_oh
_br_ow = int(obj.get("br_ow")) self.br_ow = br_ow
_ua = str(obj.get("ua")) self.ua = ua
_wbd = False self.wbd = False
_tagpu = float(obj.get("tagpu")) tag_pu = random.uniform(1, 10)
_wdif = False while len(str(tag_pu)) != 17:
_wdifrm = False tag_pu = random.uniform(1, 10)
_npmtm = False self.tagpu = tag_pu
_br_h = int(obj.get("br_h")) self.wdif = False
_br_w = int(obj.get("br_w")) self.wdifrm = False
_isf = self.npmtm = False
_nddc = int(obj.get("nddc")) self.br_h = br_h
_rs_h = int(obj.get("rs_h")) self.br_w = br_w
_rs_w = int(obj.get("rs_w")) self.isf = True
_rs_cd = int(obj.get("rs_cd")) self.nddc = 1
_phe = self.rs_h = rs_h
_nm = self.rs_w = rs_w
_jsf = self.rs_cd = rs_cd
_lg = str(obj.get("lg")) self.phe = False
_pr = int(obj.get("pr")) self.nm = False
_ars_h = int(obj.get("ars_h")) self.jsf = False
_ars_w = int(obj.get("ars_w")) self.lg = "fr-FR"
_tz = int(obj.get("tz")) self.pr = pr
_str_ss = self.ars_h = ars_h
_str_ls = self.ars_w = ars_w
_str_idb = self.tz = -60
_str_odb = self.str_ss = True
_plgod = self.str_ls = True
_plg = int(obj.get("plg")) self.str_idb = True
_plgne = str(obj.get("plgne")) self.str_odb = True
_plgre = str(obj.get("plgre")) self.plgod = False
_plgof = str(obj.get("plgof")) self.plg = plg
_plggt = str(obj.get("plggt")) self.plgne = "err"
_pltod = self.plgre = "err"
_hcovdr = self.plgof = "err"
_hcovdr2 = self.plggt = "err"
_plovdr = self.pltod = False
_plovdr2 = self.hcovdr = False
_ftsovdr = self.hcovdr2 = False
_ftsovdr2 = self.plovdr = False
_lb = self.plovdr2 = False
_eva = int(obj.get("eva")) self.ftsovdr = False
_lo = self.ftsovdr2 = False
_ts_mtp = int(obj.get("ts_mtp")) self.lb = False
_ts_tec = self.eva = eva
_ts_tsa = self.lo = False
_vnd = str(obj.get("vnd")) self.ts_mtp = ts_mtp
_bid = str(obj.get("bid")) self.ts_tec = True
_mmt = str(obj.get("mmt")) self.ts_tsa = True
_plu = str(obj.get("plu")) self.vnd = vnd
_hdn = self.bid = "NA"
_awe = self.mmt = "empty"
_geb = self.plu = str.join(",", plu) if isinstance(plu, list) else plu
_dat = self.hdn = False
_med = str(obj.get("med")) self.awe = False
_aco = str(obj.get("aco")) self.geb = False
_acots = self.dat = False
_acmp = str(obj.get("acmp")) self.med = "defined"
_acmpts = self.aco = "probably"
_acw = str(obj.get("acw")) self.acots = False
_acwts = self.acmp = "probably"
_acma = str(obj.get("acma")) self.acmpts = True
_acmats = self.acw = "probably"
_acaa = str(obj.get("acaa")) self.acwts = False
_acaats = self.acma = "maybe"
_ac3 = str(obj.get("ac3")) self.acmats = False
_ac3ts = self.acaa = "probably"
_acf = str(obj.get("acf")) self.acaats = True
_acfts = self.ac3 = ""
_acmp4 = str(obj.get("acmp4")) self.ac3ts = False
_acmp4ts = self.acf = "probably"
_acmp3 = str(obj.get("acmp3")) self.acfts = False
_acmp3ts = self.acmp4 = "maybe"
_acwm = str(obj.get("acwm")) self.acmp4ts = False
_acwmts = self.acmp3 = "probably"
_ocpt = self.acmp3ts = False
_vco = str(obj.get("vco")) self.acwm = "maybe"
_vcots = self.acwmts = False
_vch = str(obj.get("vch")) self.ocpt = False
_vchts = self.vco = ""
_vcw = str(obj.get("vcw")) self.vcots = False
_vcwts = self.vch = "probably"
_vc3 = str(obj.get("vc3")) self.vchts = True
_vc3ts = self.vcw = "probably"
_vcmp = str(obj.get("vcmp")) self.vcwts = True
_vcmpts = self.vc3 = "maybe"
_vcq = str(obj.get("vcq")) self.vc3ts = False
_vcqts = self.vcmp = ""
_vc1 = str(obj.get("vc1")) self.vcmpts = False
_vc1ts = self.vcq = ""
_dvm = int(obj.get("dvm")) self.vcqts = False
_sqt = self.vc1 = "probably"
_so = str(obj.get("so")) self.vc1ts = True
_wdw = self.dvm = dvm
_cokys = str(obj.get("cokys")) self.set_default_values()
_ecpc = self.glrd = glrd
_lgs = self.glvd = glvd
_lgsod = self.wwl = False
_psn = self.jset = int(time.time())
_edp =
_addt =
_wsdc =
_ccsr =
_nuad =
_bcda =
_idn =
_capi =
_svde =
_vpbq =
_ucdv =
_spwn =
_emt =
_bfr =
_dbov =
_cfpfe = str(obj.get("cfpfe"))
_stcfp = str(obj.get("stcfp"))
_ckwa =
_glvd = str(obj.get("glvd"))
_glrd = str(obj.get("glrd"))
_wwl =
_jset = int(obj.get("jset"))
return Root(_opts, _ttst, _ifov, _hc, _br_oh, _br_ow, _ua, _wbd, _tagpu, _wdif, _wdifrm, _npmtm, _br_h, _br_w,
_isf, _nddc, _rs_h, _rs_w, _rs_cd, _phe, _nm, _jsf, _lg, _pr, _ars_h, _ars_w, _tz, _str_ss, _str_ls,
_str_idb, _str_odb, _plgod, _plg, _plgne, _plgre, _plgof, _plggt, _pltod, _hcovdr, _hcovdr2,
_plovdr, _plovdr2, _ftsovdr, _ftsovdr2, _lb, _eva, _lo, _ts_mtp, _ts_tec, _ts_tsa, _vnd, _bid, _mmt,
_plu, _hdn, _awe, _geb, _dat, _med, _aco, _acots, _acmp, _acmpts, _acw, _acwts, _acma, _acmats,
_acaa, _acaats, _ac3, _ac3ts, _acf, _acfts, _acmp4, _acmp4ts, _acmp3, _acmp3ts, _acwm, _acwmts,
_ocpt, _vco, _vcots, _vch, _vchts, _vcw, _vcwts, _vc3, _vc3ts, _vcmp, _vcmpts, _vcq, _vcqts, _vc1,
_vc1ts, _dvm, _sqt, _so, _wdw, _cokys, _ecpc, _lgs, _lgsod, _psn, _edp, _addt, _wsdc, _ccsr, _nuad,
_bcda, _idn, _capi, _svde, _vpbq, _ucdv, _spwn, _emt, _bfr, _dbov, _cfpfe, _stcfp, _ckwa, _glvd,
_glrd, _wwl, _jset)
# Example Usage def set_default_values(self):
# jsonstring = json.loads(myjsonstring) self.sqt = False
# root = Root.from_dict(jsonstring) self.so = "portrait-primary"
self.wdw = True
self.cokys = "bG9hZFRpbWVzY3NpL="
self.ecpc = False
self.lgs = True
self.lgsod = False
self.psn = True
self.edp = False
self.addt = True
self.wsdc = True
self.ccsr = True
self.nuad = True
self.bcda = True
self.idn = True
self.capi = False
self.svde = False
self.vpbq = True
self.ucdv = False
self.spwn = False
self.emt = False
self.bfr = False
self.dbov = False
self.cfpfe = "ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudFsnXHg3MVx4NzVceDY1XHg3Mlx4NzlceDUzXHg2NVx4NmNceDY1XHg2M1x4NzRceDZmXHg3MiddKCdceDYyXHg3Mlx4NmZceDc3XHg3M1x4NjVceDcyXHg2Nlx4NmNceDZmXHg3N1x4MmRceDYzXHg2Zlx4NmVceDc0XHg2" # 4.24.1
self.stcfp = "Oi8vZC5kaWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6NzYzMDIpCiAgICBhdCB0LmV4cG9ydHMuZGRfYWIgKGh0dHBzOi8vZC5kaWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6OTA2MjIpCiAgICBhdCBodHRwczovL2QuZGlnaXRhbC5oZXJtZXMvdGFncy5qczoyOjUxNzMz" # 4.24.1
self.ckwa = True
def to_url_encoded_json(self):
js_str = jsonpickle.encode(self, unpicklable=False).replace(": ", ":").replace(", ", ",")
_safe_string = urllib.parse.quote(js_str)
return _safe_string
test_data_json = """{"glvd": "Qualcomm", "glrd": "Adreno (TM) 630", "hc": 2, "br_oh": 663, "br_ow": 384, "br_h": 663,
"br_w": 384, "rs_h": 811, "rs_w": 384, "rs_cd": 24, "ars_h": 811, "ars_w": 384, "plg": 2, "eva": 33,
"vnd": "Google Inc.", "plu": ["5gQIEKN", "Iv26GLka"],
"ua": "Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36",
"dvm": 4, "acw": "probably", "pr": 2.8125, "ts_mtp": 5,
"cookiesStr": "app.sig=Arp0SzXCTBF2ordHf3pPTd6cS14;datadome=o_7W8TjHcQjqvnFjFBGAZZ0OmNOd0fnJXfzgqOajAHBBNv7zNMFi2~Jn7wQbTEIZdr2qvg0IFFQQr~Zk5ifzM154V1XxZVhgDZeVkNyRKrQewLBIzVeSagWs587fBqdX;app=eyJmbGFzaCI6e30sImNhY2hlZmxhc2giOltdLCJjc3JmU2VjcmV0IjoieVVRWmJBWnlRTnQ5bFlNbDdNN3R6eHhqIn0=;policy=accepted;lang=fr;"}"""
if __name__ == '__main__':
test_data_dict = json.loads(test_data_json)
js = JsDataPojo(glrd=test_data_dict['glrd'], glvd=test_data_dict['glvd'], hc=test_data_dict['hc'],
ua=test_data_dict['ua'], br_oh=test_data_dict['br_oh'], br_ow=test_data_dict['br_ow'],
ars_h=test_data_dict['ars_h'], ars_w=test_data_dict['ars_w'], pr=test_data_dict['pr'],
plg=test_data_dict['plg'], br_h=test_data_dict['br_h'], br_w=test_data_dict['br_w'],
plu=test_data_dict['plu'], vnd=test_data_dict['vnd'], dvm=test_data_dict['dvm'],
ts_mtp=test_data_dict['ts_mtp'], eva=test_data_dict['eva'], rs_h=test_data_dict['rs_h'],
rs_w=test_data_dict['rs_w'], rs_cd=test_data_dict['rs_cd'])
print(js.to_url_encoded_json())
# text_file = open("jsdata.txt", "w")
# # write string to file
# text_file.write(safe_string)
# # close file
# text_file.close()
# print(safe_string)
# print(js.__dict__)
+2
View File
@@ -4,7 +4,9 @@ QUEUE_HOST = "appointment.lpaconsulting.fr"
REQUEST_DATA_QUEUE = 'REQUEST_DATA' REQUEST_DATA_QUEUE = 'REQUEST_DATA'
# REQUEST_DATA_QUEUE_TEST = 'REQUEST_DATA_TEST' # REQUEST_DATA_QUEUE_TEST = 'REQUEST_DATA_TEST'
REQUEST_DATA_QUEUE_TEST = 'REQUEST_DATA_TEST' REQUEST_DATA_QUEUE_TEST = 'REQUEST_DATA_TEST'
TEST_QUEUE = 'TEST_QUEUE'
REQUEST_DATA_QUEUE_DE = 'REQUEST_DATA_DE' REQUEST_DATA_QUEUE_DE = 'REQUEST_DATA_DE'
REQUEST_DATA_OBJECT = 'REQUEST_DATA_OBJECT'
credentials = pika.PlainCredentials('appointment', 'ZyuhJZ2xEYWhElhpJjy7YEpZGZwNYJz2fHIu') credentials = pika.PlainCredentials('appointment', 'ZyuhJZ2xEYWhElhpJjy7YEpZGZwNYJz2fHIu')
+59 -42
View File
@@ -1,4 +1,5 @@
import datetime import datetime
import json
import random import random
import threading import threading
import time import time
@@ -8,6 +9,7 @@ import pika
from db.mongo_manager import MONGO_STORE_MANAGER from db.mongo_manager import MONGO_STORE_MANAGER
from models.contact_pojo import ContactPojo from models.contact_pojo import ContactPojo
from models.jsdata_pojo import JsDataPojo
from models.result_pojo import RequestResult from models.result_pojo import RequestResult
from queue_message.CookiesPublisher import CookiesPublisher from queue_message.CookiesPublisher import CookiesPublisher
from utiles import is_time_between from utiles import is_time_between
@@ -97,52 +99,67 @@ class AppointmentRequestSender(threading.Thread):
self.channel.start_consuming() self.channel.start_consuming()
def on_message(self, ch, method, properties, body): def on_message(self, ch, method, properties, body):
print(f" [x] Received {body}")
_message_count = self.cookiesPublisher.message_count() _message_count = self.cookiesPublisher.message_count()
print("message count in queue is {}".format(_message_count)) print("message count in queue is {}".format(_message_count))
_received_cookies = body.decode("UTF-8") _received_object = body.decode("UTF-8")
sender = Sender(_received_cookies, cookiesPublisher=self.cookiesPublisher, print(f" [x] Received {_received_object}")
proxy_to_use=random.choice(self.proxy_to_use_list)) if "glrd" in _received_object:
self.contact_list = filter_contacts(self.contact_list) _received_dict = json.loads(_received_object)
# remove already booked contacts js_data = JsDataPojo(glrd=_received_dict['glrd'], glvd=_received_dict['glvd'], hc=_received_dict['hc'],
random.shuffle(self.contact_list) ua=_received_dict['ua'], br_oh=_received_dict['br_oh'], br_ow=_received_dict['br_ow'],
if len(self.contact_list) > 0 and is_open() and _message_count > 5: ars_h=_received_dict['ars_h'], ars_w=_received_dict['ars_w'], pr=_received_dict['pr'],
captchaResultGetter = CaptchaResultGetter() plg=_received_dict['plg'], br_h=_received_dict['br_h'], br_w=_received_dict['br_w'],
print("contact number is {}".format(len(self.contact_list))) plu=_received_dict['plu'], vnd=_received_dict['vnd'], dvm=_received_dict['dvm'],
ts_mtp=_received_dict['ts_mtp'], eva=_received_dict['eva'],
rs_h=_received_dict['rs_h'],
rs_w=_received_dict['rs_w'], rs_cd=_received_dict['rs_cd'])
_received_cookies = _received_dict["cookiesStr"]
sender = Sender(_received_cookies, cookiesPublisher=self.cookiesPublisher, received_dict=_received_dict,
proxy_to_use=random.choice(self.proxy_to_use_list))
self.contact_list = filter_contacts(self.contact_list) self.contact_list = filter_contacts(self.contact_list)
for con in self.contact_list: # remove already booked contacts
# if not is_already_sent(con): random.shuffle(self.contact_list)
print(con.mail) if len(self.contact_list) > 0 and is_open():
# time.sleep(random.randint(1, 5)) captchaResultGetter = CaptchaResultGetter()
if self.valid_csrf is None: print("contact number is {}".format(len(self.contact_list)))
self.valid_csrf = captchaResultGetter.get_csrf(proxy_to_use=random.choice(self.proxy_to_use_list), self.contact_list = filter_contacts(self.contact_list)
cookie=body.decode("UTF-8")) for con in self.contact_list:
_new_cookies = captchaResultGetter.get_valid_ch_cookie(sender.proxy_to_use, # if not is_already_sent(con):
old_valid_cookie=_received_cookies) print(con.mail)
if _new_cookies is not None: # time.sleep(random.randint(1, 5))
print("new cookie is " + _new_cookies) if self.valid_csrf is None:
sender.cookie_str = _new_cookies self.valid_csrf = captchaResultGetter.get_csrf(
can_continue = sender.send_request(HERMES_REGISTER, con, csrf=self.valid_csrf) proxy_to_use=random.choice(self.proxy_to_use_list),
else: cookie=body.decode("UTF-8"))
can_continue = RequestResult.COOKIES_ERROR _new_cookies = captchaResultGetter.get_valid_ch_cookie(sender.proxy_to_use, js_data,
if can_continue == RequestResult.BLOCKED: old_valid_cookie=_received_cookies)
print("cannot continue, valid_csrf is " + str(self.valid_csrf)) if _received_cookies is not None:
break print("new cookie is " + _received_cookies)
elif can_continue == RequestResult.PROXY_ERROR: sender.cookie_str = _received_cookies
print("PROXY_ERROR, will not reset valid_csrf") can_continue = sender.send_request(HERMES_REGISTER, con, csrf=self.valid_csrf)
elif can_continue == RequestResult.COOKIES_ERROR: else:
print("COOKIES_ERROR, will not reset valid_csrf") can_continue = RequestResult.COOKIES_ERROR
else: if can_continue == RequestResult.BLOCKED:
print("can continue, will reset valid_csrf") print("cannot continue, valid_csrf is " + str(self.valid_csrf))
self.valid_csrf = None break
# else: elif can_continue == RequestResult.PROXY_ERROR:
# print(con.mail + "--> skip") print("PROXY_ERROR, will not reset valid_csrf")
time.sleep(random.randint(1, 2)) elif can_continue == RequestResult.COOKIES_ERROR:
ch.basic_ack(delivery_tag=method.delivery_tag) print("COOKIES_ERROR, will not reset valid_csrf")
else:
print("can continue, will reset valid_csrf")
self.valid_csrf = None
time.sleep(random.randint(1, 2))
print("will ack method.delivery_tag: " + str(method.delivery_tag))
ch.basic_ack(delivery_tag=method.delivery_tag)
else:
print("empty list")
time.sleep(120)
print("will basic_reject method.delivery_tag: " + str(method.delivery_tag))
ch.basic_reject(delivery_tag=method.delivery_tag, requeue=True)
else: else:
print("empty list") print("not a valid object")
time.sleep(120) ch.basic_ack(delivery_tag=method.delivery_tag)
ch.basic_reject(delivery_tag=method.delivery_tag, requeue=True)
def run(self): def run(self):
print(threading.currentThread().name + " starts") print(threading.currentThread().name + " starts")
+5 -4
View File
@@ -7,7 +7,8 @@ from threading import Thread
from db.mongo_manager import MONGO_STORE_MANAGER from db.mongo_manager import MONGO_STORE_MANAGER
from excel_reader import read_contacts from excel_reader import read_contacts
from models.contact_pojo import ContactPojo from models.contact_pojo import ContactPojo
from queue_message.CookiesPublisher import CookiesPublisher, REQUEST_DATA_QUEUE_DE, REQUEST_DATA_QUEUE_TEST from queue_message.CookiesPublisher import CookiesPublisher, REQUEST_DATA_QUEUE_DE, REQUEST_DATA_QUEUE_TEST, \
REQUEST_DATA_OBJECT, TEST_QUEUE
from queue_message.appointmentrequestsender import AppointmentRequestSender, REQUEST_DATA_QUEUE from queue_message.appointmentrequestsender import AppointmentRequestSender, REQUEST_DATA_QUEUE
from utiles import is_time_between from utiles import is_time_between
from workers.captcha_result_getter import CaptchaResultGetter, HERMES_REGISTER from workers.captcha_result_getter import CaptchaResultGetter, HERMES_REGISTER
@@ -88,14 +89,14 @@ def send_appointment_request(message_queue_name, _contact_list):
if __name__ == '__main__': if __name__ == '__main__':
contacts_file_path = '~/Desktop/contact_list_2024-03-14-2.xlsx' contacts_file_path = '~/Desktop/contact_list_2024-03-09.xlsx'
_contact_list = read_contacts(contacts_file_path) _contact_list = read_contacts(contacts_file_path)
_segment_number = 1 _segment_number = 10
for i in range(0, _segment_number): for i in range(0, _segment_number):
print(i) print(i)
_step = int(len(_contact_list) / _segment_number) _step = int(len(_contact_list) / _segment_number)
_sublist = _contact_list[i:_step * (i + 1)] _sublist = _contact_list[i:_step * (i + 1)]
print(_sublist[0]) print(_sublist[0])
print(_sublist[-1]) print(_sublist[-1])
_thread1 = Thread(target=send_appointment_request, args=(REQUEST_DATA_QUEUE_DE, _sublist)) _thread1 = Thread(target=send_appointment_request, args=(REQUEST_DATA_OBJECT, _sublist))
_thread1.start() _thread1.start()
View File
+30
View File
@@ -0,0 +1,30 @@
from models.jsdata_pojo import JsDataPojo
def generate_js_data():
pass
if __name__ == '__main__':
glrd = "ANGLE (Qualcomm, Adreno (TM) 650, OpenGL ES 3.2)"
glvd = "Google Inc. (Qualcomm)"
hc = 6
br_oh = 646
br_ow = 360
br_h = 646
br_w = 360
rs_h = 1440
rs_w = 2560
rs_cd = 24
ars_h = 800
ars_w = 360
eva = 33
vnd = "Google Inc."
plu = "LNGqVpzZ,yCJEKNO"
plg = 2
ua = "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36"
jsData = JsDataPojo(glrd=glrd, hc=hc, ua=ua, br_oh=br_oh, br_ow=br_ow, br_h=br_h, br_w=br_w, rs_h=rs_h, rs_w=rs_w,
eva=eva,
rs_cd=rs_cd, plg=plg, plu=plu, ars_h=ars_h, ars_w=ars_w, vnd=vnd, glvd=glvd)
print(jsData)
+13 -20
View File
@@ -5,6 +5,7 @@ from time import time
from typing import Union from typing import Union
import requests import requests
from models.jsdata_pojo import JsDataPojo
from workers.proxies_constants import PROXY_LIST_FR from workers.proxies_constants import PROXY_LIST_FR
API_KEY = "d66aaf490d8aa424a5175e1fbd1aadea" API_KEY = "d66aaf490d8aa424a5175e1fbd1aadea"
@@ -97,9 +98,16 @@ class CaptchaResultGetter:
print(error) print(error)
return None return None
def get_valid_ch_cookie(self, proxy_to_use, old_valid_cookie: str = None, dvm=4, hc=6) -> Union[str, None]: def get_ch_raw_data_from_js_data(self, js_data: JsDataPojo, old_valid_cookie) -> str:
_tag_version = "4.24.1"
_raw_data = "jsData={}&eventCounters=%5B%5D&jsType=ch&cid={}&ddk=789361B674144528D0B7EE76B35826&Referer=https%253A%252F%252Frendezvousparis.hermes.com%252Fclient%252Fregister&request=%252Fclient%252Fregister&responsePage=origin&ddv={}".format(
js_data.to_url_encoded_json(), old_valid_cookie, _tag_version)
print("raw data is " + _raw_data)
return _raw_data
def get_valid_ch_cookie(self, proxy_to_use, js_data: JsDataPojo, old_valid_cookie: str = None) -> Union[str, None]:
headers = {'content-Type': 'application/x-www-form-urlencoded', headers = {'content-Type': 'application/x-www-form-urlencoded',
'user-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36', 'user-Agent': js_data.ua,
'accept': '*/*', 'accept': '*/*',
'referer': 'https://rendezvousparis.hermes.com/', 'referer': 'https://rendezvousparis.hermes.com/',
'origin': 'https://rendezvousparis.hermes.com/', 'origin': 'https://rendezvousparis.hermes.com/',
@@ -109,13 +117,14 @@ class CaptchaResultGetter:
'sec-fetch-dest': 'empty', 'sec-fetch-dest': 'empty',
'accept-encoding': 'gzip, deflate, br', 'accept-encoding': 'gzip, deflate, br',
'accept-language': 'fr-FR,fr;q=0.6'} 'accept-language': 'fr-FR,fr;q=0.6'}
print(proxy_to_use) # print(proxy_to_use)
print("send request to get new cookie") print("send request to get new cookie")
print(headers) print(headers)
try: try:
# tag_pu = 10 * Math.random() # tag_pu = 10 * Math.random()
response = requests.post(url="https://d.digital.hermes/js/", headers=headers, verify=False, response = requests.post(url="https://d.digital.hermes/js/", headers=headers, verify=False,
data=self.get__ch_raw_data(old_valid_cookie=old_valid_cookie, dvm=dvm, hc=hc), data=self.get_ch_raw_data_from_js_data(js_data=js_data,
old_valid_cookie=old_valid_cookie),
proxies=proxy_to_use, timeout=15) proxies=proxy_to_use, timeout=15)
print(response.status_code) print(response.status_code)
if response.status_code == 200: if response.status_code == 200:
@@ -130,22 +139,6 @@ class CaptchaResultGetter:
print(error) print(error)
return None return None
def get__ch_raw_data(self, old_valid_cookie: str = None, dvm=4, hc=6):
_raw_data = None
js_set = int(time())
tag_pu = random.uniform(1, 10)
while len(str(tag_pu)) != 17:
tag_pu = random.uniform(1, 10)
if old_valid_cookie is None:
_raw_data = "jsData=%7B%22log1%22%3Afalse%2C%22opts%22%3A%22endpoint%2CajaxListenerPath%22%2C%22ttst%22%3A38%2C%22ifov%22%3Afalse%2C%22hc%22%3A{}%2C%22br_oh%22%3A646%2C%22br_ow%22%3A360%2C%22ua%22%3A%22Mozilla%2F5.0%20(Linux%3B%20Android%2010%3B%20K)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F115.0.0.0%20Mobile%20Safari%2F537.36%22%2C%22wbd%22%3Afalse%2C%22tagpu%22%3A{}%2C%22wdif%22%3Afalse%2C%22wdifrm%22%3Afalse%2C%22npmtm%22%3Afalse%2C%22br_h%22%3A646%2C%22br_w%22%3A360%2C%22nddc%22%3A1%2C%22rs_h%22%3A800%2C%22rs_w%22%3A360%2C%22rs_cd%22%3A24%2C%22phe%22%3Afalse%2C%22nm%22%3Afalse%2C%22jsf%22%3Afalse%2C%22lg%22%3A%22fr-FR%22%2C%22pr%22%3A3%2C%22ars_h%22%3A800%2C%22ars_w%22%3A360%2C%22tz%22%3A-60%2C%22str_ss%22%3Atrue%2C%22str_ls%22%3Atrue%2C%22str_idb%22%3Atrue%2C%22str_odb%22%3Atrue%2C%22plgod%22%3Afalse%2C%22plg%22%3A2%2C%22plgne%22%3A%22err%22%2C%22plgre%22%3A%22err%22%2C%22plgof%22%3A%22err%22%2C%22plggt%22%3A%22err%22%2C%22pltod%22%3Afalse%2C%22hcovdr%22%3Afalse%2C%22hcovdr2%22%3Afalse%2C%22plovdr%22%3Afalse%2C%22plovdr2%22%3Afalse%2C%22ftsovdr%22%3Afalse%2C%22ftsovdr2%22%3Afalse%2C%22lb%22%3Afalse%2C%22eva%22%3A33%2C%22lo%22%3Afalse%2C%22ts_mtp%22%3A5%2C%22ts_tec%22%3Atrue%2C%22ts_tsa%22%3Atrue%2C%22vnd%22%3A%22Google%20Inc.%22%2C%22bid%22%3A%22NA%22%2C%22mmt%22%3A%22empty%22%2C%22plu%22%3A%226GLkaVK%2CjRvAfXq0%22%2C%22hdn%22%3Afalse%2C%22awe%22%3Afalse%2C%22geb%22%3Afalse%2C%22dat%22%3Afalse%2C%22med%22%3A%22defined%22%2C%22aco%22%3A%22probably%22%2C%22acots%22%3Afalse%2C%22acmp%22%3A%22probably%22%2C%22acmpts%22%3Atrue%2C%22acw%22%3A%22probably%22%2C%22acwts%22%3Afalse%2C%22acma%22%3A%22maybe%22%2C%22acmats%22%3Afalse%2C%22acaa%22%3A%22probably%22%2C%22acaats%22%3Atrue%2C%22ac3%22%3A%22%22%2C%22ac3ts%22%3Afalse%2C%22acf%22%3A%22probably%22%2C%22acfts%22%3Afalse%2C%22acmp4%22%3A%22maybe%22%2C%22acmp4ts%22%3Afalse%2C%22acmp3%22%3A%22probably%22%2C%22acmp3ts%22%3Afalse%2C%22acwm%22%3A%22maybe%22%2C%22acwmts%22%3Afalse%2C%22ocpt%22%3Afalse%2C%22vco%22%3A%22%22%2C%22vcots%22%3Afalse%2C%22vch%22%3A%22probably%22%2C%22vchts%22%3Atrue%2C%22vcw%22%3A%22probably%22%2C%22vcwts%22%3Atrue%2C%22vc3%22%3A%22maybe%22%2C%22vc3ts%22%3Afalse%2C%22vcmp%22%3A%22%22%2C%22vcmpts%22%3Afalse%2C%22vcq%22%3A%22%22%2C%22vcqts%22%3Afalse%2C%22vc1%22%3A%22probably%22%2C%22vc1ts%22%3Atrue%2C%22dvm%22%3A{}%2C%22sqt%22%3Afalse%2C%22so%22%3A%22portrait-primary%22%2C%22wdw%22%3Atrue%2C%22cokys%22%3A%22bG9hZFRpbWVzY3NpL%3D%22%2C%22ecpc%22%3Afalse%2C%22lgs%22%3Atrue%2C%22lgsod%22%3Afalse%2C%22psn%22%3Atrue%2C%22edp%22%3Afalse%2C%22addt%22%3Atrue%2C%22wsdc%22%3Atrue%2C%22ccsr%22%3Atrue%2C%22nuad%22%3Atrue%2C%22bcda%22%3Atrue%2C%22idn%22%3Atrue%2C%22capi%22%3Afalse%2C%22svde%22%3Afalse%2C%22vpbq%22%3Atrue%2C%22ucdv%22%3Afalse%2C%22spwn%22%3Afalse%2C%22emt%22%3Afalse%2C%22bfr%22%3Afalse%2C%22dbov%22%3Afalse%2C%22cfpfe%22%3A%22ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudFsnXHg3MVx4NzVceDY1XHg3Mlx4NzlceDUzXHg2NVx4NmNceDY1XHg2M1x4NzRceDZmXHg3MiddKCdceDYyXHg3Mlx4NmZceDc3XHg3M1x4NjVceDcyXHg2Nlx4NmNceDZmXHg3N1x4MmRceDYzXHg2Zlx4NmVceDc0XHg2%22%2C%22stcfp%22%3A%22aWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6NzUxMjIpCiAgICBhdCA8Y29tcHV0ZWQ%2BIFthcyBkZF9hYV0gKGh0dHBzOi8vZC5kaWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6ODc0OTcpCiAgICBhdCBodHRwczovL2QuZGlnaXRhbC5oZXJtZXMvdGFncy5qczoyOjUxNTM1%22%2C%22ckwa%22%3Atrue%2C%22glvd%22%3A%22Google%20Inc.%20(Qualcomm)%22%2C%22glrd%22%3A%22ANGLE%20(Qualcomm%2C%20Adreno%20(TM)%20650%2C%20OpenGL%20ES%203.2)%22%2C%22wwl%22%3Afalse%2C%22jset%22%3A{}%7D&eventCounters=%5B%5D&jsType=ch&cid=HG1lksF0XhPB_eV20MFkjOIO23fSH1DxZ1lsGCJ3opnnvGKp_7gihsaJK76kIwphZYvAkAs19ohywGLxvAi~5F3VT6kg8ubmzYfBNcdbfXabTcb7Z4QNDG5UlD7lri90&ddk=789361B674144528D0B7EE76B35826&Referer=https%253A%252F%252Frendezvousparis.hermes.com%252Fclient%252Fregister&request=%252Fclient%252Fregister&responsePage=origin&ddv=4.19.3".format(
hc, tag_pu, dvm, js_set)
else:
_raw_data = "jsData=%7B%22opts%22%3A%22endpoint%2CajaxListenerPath%22%2C%22ttst%22%3A53%2C%22ifov%22%3Afalse%2C%22hc%22%3A{}%2C%22br_oh%22%3A646%2C%22br_ow%22%3A360%2C%22ua%22%3A%22Mozilla%2F5.0%20(Linux%3B%20Android%2010%3B%20K)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F115.0.0.0%20Mobile%20Safari%2F537.36%22%2C%22wbd%22%3Afalse%2C%22tagpu%22%3A{}%2C%22wdif%22%3Afalse%2C%22wdifrm%22%3Afalse%2C%22npmtm%22%3Afalse%2C%22br_h%22%3A646%2C%22br_w%22%3A360%2C%22isf%22%3Atrue%2C%22nddc%22%3A1%2C%22rs_h%22%3A800%2C%22rs_w%22%3A360%2C%22rs_cd%22%3A24%2C%22phe%22%3Afalse%2C%22nm%22%3Afalse%2C%22jsf%22%3Afalse%2C%22lg%22%3A%22fr-FR%22%2C%22pr%22%3A3%2C%22ars_h%22%3A800%2C%22ars_w%22%3A360%2C%22tz%22%3A-60%2C%22str_ss%22%3Atrue%2C%22str_ls%22%3Atrue%2C%22str_idb%22%3Atrue%2C%22str_odb%22%3Atrue%2C%22plgod%22%3Afalse%2C%22plg%22%3A2%2C%22plgne%22%3A%22err%22%2C%22plgre%22%3A%22err%22%2C%22plgof%22%3A%22err%22%2C%22plggt%22%3A%22err%22%2C%22pltod%22%3Afalse%2C%22hcovdr%22%3Afalse%2C%22hcovdr2%22%3Afalse%2C%22plovdr%22%3Afalse%2C%22plovdr2%22%3Afalse%2C%22ftsovdr%22%3Afalse%2C%22ftsovdr2%22%3Afalse%2C%22lb%22%3Afalse%2C%22eva%22%3A33%2C%22lo%22%3Afalse%2C%22ts_mtp%22%3A5%2C%22ts_tec%22%3Atrue%2C%22ts_tsa%22%3Atrue%2C%22vnd%22%3A%22Google%20Inc.%22%2C%22bid%22%3A%22NA%22%2C%22mmt%22%3A%22empty%22%2C%22plu%22%3A%22LNGqVpzZ%2CyCJEKNO%22%2C%22hdn%22%3Afalse%2C%22awe%22%3Afalse%2C%22geb%22%3Afalse%2C%22dat%22%3Afalse%2C%22med%22%3A%22defined%22%2C%22aco%22%3A%22probably%22%2C%22acots%22%3Afalse%2C%22acmp%22%3A%22probably%22%2C%22acmpts%22%3Atrue%2C%22acw%22%3A%22probably%22%2C%22acwts%22%3Afalse%2C%22acma%22%3A%22maybe%22%2C%22acmats%22%3Afalse%2C%22acaa%22%3A%22probably%22%2C%22acaats%22%3Atrue%2C%22ac3%22%3A%22%22%2C%22ac3ts%22%3Afalse%2C%22acf%22%3A%22probably%22%2C%22acfts%22%3Afalse%2C%22acmp4%22%3A%22maybe%22%2C%22acmp4ts%22%3Afalse%2C%22acmp3%22%3A%22probably%22%2C%22acmp3ts%22%3Afalse%2C%22acwm%22%3A%22maybe%22%2C%22acwmts%22%3Afalse%2C%22ocpt%22%3Afalse%2C%22vco%22%3A%22%22%2C%22vcots%22%3Afalse%2C%22vch%22%3A%22probably%22%2C%22vchts%22%3Atrue%2C%22vcw%22%3A%22probably%22%2C%22vcwts%22%3Atrue%2C%22vc3%22%3A%22maybe%22%2C%22vc3ts%22%3Afalse%2C%22vcmp%22%3A%22%22%2C%22vcmpts%22%3Afalse%2C%22vcq%22%3A%22%22%2C%22vcqts%22%3Afalse%2C%22vc1%22%3A%22probably%22%2C%22vc1ts%22%3Atrue%2C%22dvm%22%3A{}%2C%22sqt%22%3Afalse%2C%22so%22%3A%22portrait-primary%22%2C%22wdw%22%3Atrue%2C%22cokys%22%3A%22bG9hZFRpbWVzY3NpL%3D%22%2C%22ecpc%22%3Afalse%2C%22lgs%22%3Atrue%2C%22lgsod%22%3Afalse%2C%22psn%22%3Atrue%2C%22edp%22%3Afalse%2C%22addt%22%3Atrue%2C%22wsdc%22%3Atrue%2C%22ccsr%22%3Atrue%2C%22nuad%22%3Atrue%2C%22bcda%22%3Atrue%2C%22idn%22%3Atrue%2C%22capi%22%3Afalse%2C%22svde%22%3Afalse%2C%22vpbq%22%3Atrue%2C%22ucdv%22%3Afalse%2C%22spwn%22%3Afalse%2C%22emt%22%3Afalse%2C%22bfr%22%3Afalse%2C%22dbov%22%3Afalse%2C%22cfpfe%22%3A%22ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudFsnXHg3MVx4NzVceDY1XHg3Mlx4NzlceDUzXHg2NVx4NmNceDY1XHg2M1x4NzRceDZmXHg3MiddKCdceDYyXHg3Mlx4NmZceDc3XHg3M1x4NjVceDcyXHg2Nlx4NmNceDZmXHg3N1x4MmRceDYzXHg2Zlx4NmVceDc0XHg2%22%2C%22stcfp%22%3A%22Oi8vZC5kaWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6NzYzMDIpCiAgICBhdCB0LmV4cG9ydHMuZGRfYWIgKGh0dHBzOi8vZC5kaWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6OTA2MjIpCiAgICBhdCBodHRwczovL2QuZGlnaXRhbC5oZXJtZXMvdGFncy5qczoyOjUxNzMz%22%2C%22ckwa%22%3Atrue%2C%22glvd%22%3A%22Google%20Inc.%20(Qualcomm)%22%2C%22glrd%22%3A%22ANGLE%20(Qualcomm%2C%20Adreno%20(TM)%20650%2C%20OpenGL%20ES%203.2)%22%2C%22wwl%22%3Afalse%2C%22jset%22%3A{}%7D&eventCounters=%5B%5D&jsType=ch&cid={}&ddk=789361B674144528D0B7EE76B35826&Referer=https%253A%252F%252Frendezvousparis.hermes.com%252Fclient%252Fregister&request=%252Fclient%252Fregister&responsePage=origin&ddv=4.24.1".format(
hc, tag_pu, dvm, js_set, old_valid_cookie)
print("raw data is " + _raw_data)
return _raw_data
def get_raw_data(self, old_valid_cookie: str = None, dvm=4, hc=6): def get_raw_data(self, old_valid_cookie: str = None, dvm=4, hc=6):
_raw_data = None _raw_data = None
+6 -2
View File
@@ -1,4 +1,5 @@
import datetime import datetime
import json
import random import random
import time import time
from http.cookies import SimpleCookie from http.cookies import SimpleCookie
@@ -14,13 +15,14 @@ from workers.proxies_constants import PROXY_LIST_FR
class Sender: class Sender:
def __init__(self, cookie_str, cookiesPublisher: CookiesPublisher, proxy_to_use): def __init__(self, cookie_str, cookiesPublisher: CookiesPublisher, received_dict, proxy_to_use):
self.store_type = "random" self.store_type = "random"
self.cookie = SimpleCookie() self.cookie = SimpleCookie()
self.cookiesPublisher = cookiesPublisher self.cookiesPublisher = cookiesPublisher
# self.cookie_str = 'datadome=~pxdHFAvsQl2rvDrTzhPgCHxu~4TBcePTTE~Cy8Rgol6oMRc11gA02VRp0Z3uEDUszCjacubNu7vbfQCh27gz8RC10u_325pt_gsMmJh1ScGvOofVJiVAbEKvSEUjd82;policy=accepted;app.sig=PhjmDkq_dI49pADppDNKxpLe_G4;app=eyJmbGFzaCI6e30sImNhY2hlZmxhc2giOltdLCJjc3JmU2VjcmV0IjoiYnRodHNYU1lvdnl4RzVGakpGRDZsQ0JtIn0=;lang=fr;' # self.cookie_str = 'datadome=~pxdHFAvsQl2rvDrTzhPgCHxu~4TBcePTTE~Cy8Rgol6oMRc11gA02VRp0Z3uEDUszCjacubNu7vbfQCh27gz8RC10u_325pt_gsMmJh1ScGvOofVJiVAbEKvSEUjd82;policy=accepted;app.sig=PhjmDkq_dI49pADppDNKxpLe_G4;app=eyJmbGFzaCI6e30sImNhY2hlZmxhc2giOltdLCJjc3JmU2VjcmV0IjoiYnRodHNYU1lvdnl4RzVGakpGRDZsQ0JtIn0=;lang=fr;'
self.cookie_str = cookie_str self.cookie_str = cookie_str
self._csrf = None self._csrf = None
self.received_dict = received_dict
self.proxy_to_use = proxy_to_use self.proxy_to_use = proxy_to_use
self.cookie.load(self.cookie_str) self.cookie.load(self.cookie_str)
@@ -85,7 +87,9 @@ class Sender:
new_coolies_str = new_coolies_str + key + "=" + new_cookies[key] + ";" new_coolies_str = new_coolies_str + key + "=" + new_cookies[key] + ";"
print("will publish to queue {}".format(new_coolies_str)) print("will publish to queue {}".format(new_coolies_str))
# upload the cookie to queue # upload the cookie to queue
self.cookiesPublisher.publish_body(new_coolies_str) self.received_dict['cookiesStr'] = new_coolies_str
print("body in json:{}".format(json.dumps(self.received_dict)))
self.cookiesPublisher.publish_body(json.dumps(self.received_dict))
# self.cookie_str = new_coolies_str # self.cookie_str = new_coolies_str
return RequestResult.SUCCESS return RequestResult.SUCCESS
else: else: