Exemple #1
0
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
Exemple #2
0
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')
Exemple #3
0
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')
Exemple #4
0
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)
Exemple #5
0
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()
Exemple #6
0
                  '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)