def get_data_exel(file_name, POS_VIN, date, aniCaptchaKey, delta_del): try: #if True: excel_file = xlrd.open_workbook(file_name) sheet = excel_file.sheet_by_index(0) row_number = sheet.nrows except Exception: print_col('Ошибка чтения из файла! Перезапустите программу.', 'red') eternity_cycle_deep() vin_codes = [] delta = 0 super_vin_codes = [] for row in range(1, row_number): try: delta += 1 if delta % delta_del == 0: super_vin_codes.append(vin_codes) vin_codes = [] delta = 0 vin = str((sheet.row(row)[POS_VIN])) vin = update(vin) vin_codes.append({'vin': vin, 'date': date, 'aniCaptchaKey': aniCaptchaKey}) except Exception: pass super_vin_codes.append(vin_codes) return super_vin_codes
def starting(file_name, POS_VIN, date, antiCaptchaKey, delta, pool_col): print_col('\nДля продолжения нажмите Enter', 'blue') input() data = get_data_exel(file_name, POS_VIN, date, antiCaptchaKey, delta) print_col('Данные из EXEL таблицы получены!\nЗапуск потоков и начало обработки.', 'magenta') print_col(f'Разделено на {len(data)} частей.', 'yellow') mult(data, pool_col) print_col("Обработка завершена. Запись...", 'green') write(file_name, POS_VIN) print_col('Запись завершена.', 'green')
def mult(data, pool_col): with open('log_rsa.txt', 'w', encoding='utf-8') as log: log.write('') for d in data: with Pool(pool_col) as p: try: p.map(getInfoForVIN, d) except Exception: pass p.close() print_col('Остановка на 30 секунд.', 'blue') time.sleep(30) print_col('Перезагрузка завершена.', 'magenta')
def getInfoForVIN(data): vincode = data['vin'] date = data['date'] antiCaptchaKey = data['aniCaptchaKey'] site_key = '6Lf2uycUAAAAALo3u8D10FqNuSpUvUXlfP7BzHOk' url = 'https://dkbm-web.autoins.ru/dkbm-web-1.0/policy.htm?vin=' + vincode + '&licensePlate=&bodyNumber=' \ '&chassisNumber=&date=' + date captchaKey = None while captchaKey == None: captchaKey = AntiCaptcha(site_key, url, antiCaptchaKey) r1 = requests.post("https://dkbm-web.autoins.ru/dkbm-web-1.0/policyInfo.htm", data={"bsoseries": "ССС", "bsonumber": "", "requestDate": date, "vin": vincode, "licensePlate": "", "bodyNumber": "", "chassisNumber": "", "isBsoRequest": "false", "captcha": captchaKey}, verify=False) res = json.loads(r1.text) if res["validCaptcha"]: processId = res["processId"] time.sleep(2) r2 = requests.get("https://dkbm-web.autoins.ru/dkbm-web-1.0/checkPolicyInfoStatus.htm", params=[("processId", processId),("_", int(time.time()*1000))], verify=False) res = json.loads(r2.text) if(res["RequestStatusInfo"]["RequestStatusCode"] == 3): r3 = requests.post("https://dkbm-web.autoins.ru/dkbm-web-1.0/policyInfoData.htm", data={"processId": processId, "bsoseries": "ССС", "bsonumber": "", "vin": vincode, "licensePlate": "", "bodyNumber": "", "chassisNumber": "", "requestDate": date, "g-recaptcha-response": ""}, verify=False) result = [] for row in html.document_fromstring(r3.text).xpath('//tr[@class="data-row"]'): cells = row.xpath('.//td') sp = [] for i in range(1, 30): sp.append(get_data(cells, i)) elems = sp[4].split('\n') elems_need = [] for i in elems: if i.strip() != '': elems_need.append(i.strip()) znak, mark, vinc, n_k, m_d = '-', '-', '-', '-', '-' for i in range(len(elems_need)): if elems_need[i] == 'Государственный регистрационный знак' and i < len(elems_need) - 1: znak = elems_need[i + 1] if elems_need[i] == 'Марка и модель транспортного средства' and i < len(elems_need) - 2: mark = elems_need[i + 2] if elems_need[i] == 'VIN' and i < len(elems_need) - 1: vinc = elems_need[i + 1] if elems_need[i] == 'Номер кузова' and i < len(elems_need) - 1: n_k = elems_need[i + 1] if elems_need[i] == 'Мощность двигателя для категории' and i < len(elems_need) - 2: m_d = elems_need[i + 2] sp_reverse = sp[::-1] z = 0 for i in range(len(sp_reverse)): if sp_reverse[i] == '-': continue z += 1 if z == 1: bms = sp_reverse[i] if z == 2: own = sp_reverse[i] if z == 3: polhold = sp_reverse[i] if z == 4: lim = sp_reverse[i] if z == 5: use_pr = sp_reverse[i] if z == 6: w_t = sp_reverse[i] if z == 7: go_pl = sp_reverse[i] result = [{ "OSAGO": sp[0], "nameCompany": sp[1], "statusContract": sp[2], "validity": sp[3], "carInfo": { "model": mark, "stateRegistrationMark": znak, "VIN": vinc, "bodyNumber": n_k, "enginePower": m_d, }, "goPlace": go_pl, "withTrailer": w_t, "usePurpose": use_pr, "limits": lim, "policyholder": polhold, "owner": own, "BMS": bms }] with open('log_rsa.txt', 'a', encoding='utf-8') as log: log.write(str(result)) log.write("\n") answer_sp = [] answer__sp = open('log_rsa.txt', 'r', encoding='UTF-8').read().split('\n') for i in range(len(answer__sp)): try: if i == len(answer__sp) - 1: break try: answer_sp.append(ast.literal_eval(answer__sp[i])) except Exception: pass except Exception: pass print_col(f'Обработано: {len(answer_sp)}.', 'green') return 0 else: print_col(f'[ERROR] {res}', 'red') else: getInfoForVIN(data)
def start(): global file_name date = date_p.get() if file_name == '': print_col('[Error] Вы не выбрали файл! Перезапустите программу!', 'red') eternity_cycle_deep() elif '.xls' not in file_name: print_col( '[Error] Вы выбрали файл без .xls расширения! Перезапустите программу!', 'red') eternity_cycle_deep() else: print_col(f'[True] Выбранный файл: {file_name}', 'green') if date == '': date = str(datetime.datetime.now().date().today()).split('-') date = date[2] + '.' + date[1] + '.' + date[0] print_col( f'[Added] Дата поиска не была указана, поэтому выбрана текущая дата ({date}).', 'yellow') elif date[0].isdigit() and date[1].isdigit() and date[2] == '.' and date[3].isdigit() and date[4].isdigit() and \ date[5] == '.' and date[6].isdigit() and date[7].isdigit() and date[8].isdigit() and date[9].isdigit(): print_col(f'[True] Указанная дата: {date}', 'green') else: print_col(f'[Error] Некорректно указана дата: {date}', 'red') POS_VIN = to_digit(vins_col.get().upper()) if str(POS_VIN).isdigit(): print_col(f'[True] Введенный индекс столбца с данными - {POS_VIN}', 'green') else: print_col( f'[Error] Неверно введена буква столбца. Перезапустите программу', 'red') eternity_cycle_deep() antiCaptchaKey = key.get() if antiCaptchaKey == '': print_col( '[True] Так как ключ антикапчи не был введен, проверка будет происходить при помощи CapMonster!', 'green') else: print_col( '[Added] Так как ключ антикапчи был введен, проверка будет происходить при помощи сервисов RuCaptcha' ' или AntiCaptcha!', 'yellow') pool_col = (pool_cool_p.get()) if pool_col == '': print_col( '[Added] Так как вы не ввели количество используемых Пулов, то выставлено значение по умолчанию' ' (50 пулов)', 'yellow') pool_col = 50 else: print_col(f'[True] Будет использовано {pool_col} пулов.', 'green') pool_col = int(pool_col) delta = (delta_p.get()) if delta == '': delta = 300 print_col( '[Added] Так как вы не ввели через сколько проверок программе делать небольшой технический перерыв, ' 'то выставлено значение по умолчанию (300 проверок).', 'yellow') else: delta = int(delta) print_col(f'[True] Выбрано деление по {delta} строк в одной проверке.', 'green') starting(file_name, POS_VIN, date, antiCaptchaKey, delta, pool_col) eternity_cycle_deep()
'green') starting(file_name, POS_VIN, date, antiCaptchaKey, delta, pool_col) eternity_cycle_deep() def insertText(): global file_name file_name = fd.askopenfilename() print('[system] Выбранный файл: ' + file_name) if __name__ == '__main__': urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) multiprocessing.freeze_support() requests.packages.urllib3.disable_warnings(InsecureRequestWarning) print_col('Здравствуйте! Введите данные для начала работы.', 'green') file_name = '' window = Tk() window.title("РСА | КБ") window.geometry('300x300') window.resizable(False, False) date_p = StringVar() vins_col = StringVar() key = StringVar() delta_p = StringVar() pool_cool_p = StringVar() file_btn = Button(window, text="Выбор Exel файла", command=insertText, width=25, height=1).place(relx=0.19, rely=0.02)