Pull to refresh
12
0
Никита @Xokare

Питонист. Специалист по инфобезу

Send message
Недавно на хабре была статься про телеграм-бота для добавления людей в футбольную команду. Тут нужен такой же, который будет решать, кто пойдет фоткать.

Слишком просто, двадцать первый век же. Надо собрать дрона который будет раз в n времени подлетать и фотографировать доску, после чего отправит это всё с помощью лазерного модема
А нейронные сети на что?

Да запросто, достроим и через набор программ от топаза прогоним, ну и немного велосипедов, куда же без них
На самом деле, это все ирония. Просто показалось, что в статье слишком много всего придумано просто «потому что могу».

Да я тоже местами иронизирую. ИМХО тут надо с источником информации работать, а не костыли городить
Распознать то не проблема, проблема его получить. Это же надо что бы кто-то сходил, сфотографировал, но даже если этот кто-то найдётся текст будет не в фокусе, с бликами и при ужасном освещении, так что обработка пред распознаванием даст массу новых ощущений в области ниже пояса. И всё равно в самый интересный момент расписание внезапно поменяется. Enjoy
Ха ха, у вас есть сайт. У нас старый добрый стенд с огромными листами
Значит нужно сделать дебетовую Apple Card. Да, я Капитан Очевидность
Федеральный закон от 29.12.2010 N 436-ФЗ «О защите детей от информации, причиняющей вред их здоровью и развитию»
Статья 11. Общие требования к обороту информационной продукции
4. Оборот информационной продукции, содержащей информацию, предусмотренную статьей 5 настоящего Федерального закона, без знака информационной продукции не допускается, за исключением:
1) учебников и учебных пособий, рекомендуемых или допускаемых к использованию в образовательном процессе в соответствии с законодательством об образовании;
2) телепрограмм, телепередач, транслируемых в эфире без предварительной записи;
3) информационной продукции, распространяемой посредством радиовещания;
4) информационной продукции, демонстрируемой посредством зрелищных мероприятий;
5) периодических печатных изданий, специализирующихся на распространении информации общественно-политического или производственно-практического характера;
6) информации, распространяемой посредством информационно-телекоммуникационных сетей, в том числе сети «Интернет», кроме сетевых изданий и аудиовизуальных сервисов;
7) комментариев и (или) сообщений, размещаемых по своему усмотрению читателями сетевого издания на сайте такого издания в порядке, установленном редакцией этого средства массовой информации.
Не совсем так, например для подачи кассационной жалобы нужно исполнить решение суда, например оплатить штраф. Является ли это признанием нарушения?
Номер телефона и email в письме от РКН зацензурены гениально, так что узнаются простым копированием текста
Так пленум же аж в 2018 году был.
ППВС от 25.12.2018 N 46 «О некоторых вопросах судебной практики по делам о преступлениях против конституционных прав и свобод человека и гражданина»

9. Разъяснить судам, что само по себе участие в незаконном обороте специальных технических средств не может свидетельствовать о виновности лица в совершении преступления, предусмотренного статьей 138.1 УК РФ, если его умысел не был направлен на приобретение и (или) сбыт именно таких средств (например, лицо посредством общедоступного интернет-ресурса приобрело специальное техническое средство, рекламируемое как устройство бытового назначения, добросовестно заблуждаясь относительно его фактического предназначения).

Не могут быть квалифицированы по статье 138.1 УК РФ также действия лица, которое приобрело предназначенное для негласного получения информации устройство с намерением использовать, например, в целях обеспечения личной безопасности, безопасности членов семьи, в том числе детей, сохранности имущества или в целях слежения за животными и не предполагало применять его в качестве средства посягательства на конституционные права граждан.
Ох уж этот театр безопасности и «заботы» о персональных данных
По улицам Слона водили,
Как видно напоказ —
Известно, что Слоны в диковинку у нас —
Так за Слоном толпы зевак ходили.
Отколе ни возьмись, навстречу Моська им.
Увидевши Слона, ну на него метаться,
И лаять, и визжать, и рваться,
Ну, так и лезет в драку с ним.
«Соседка, перестань срамиться»,
Ей шавка говорит: «тебе ль с Слоном возиться?
Смотри, уж ты хрипишь, а он себе идет
Вперед
И лаю твоего совсем не примечает».—
«Эх, эх!» ей Моська отвечает:
«Вот то-то мне и духу придает,
Что я, совсем без драки,
Могу попасть в большие забияки.
Пускай же говорят собаки:
«Ай, Моська! знать она сильна,
Что лает на Слона!»
Я недавно получал в ФНС свидетельство о цифрах дьявола (ИНН) и к моему удивлению ИНН мне присвоили меньше чем через месяц поле рождения
upd. закрвл try для ИП шников
itemParse += item['n'] + '\n'
try:
    itemParse += item['g'] + '\n'
except Exception:
    pass
try:
    itemParse += 'Адрес: ' + item['a']+'\n'
except Exception:
    pass
itemParse += 'ИНН: ' + item['i']+'\n'
itemParse += 'ОГРН: ' + item['o']+'\n'
try:
    itemParse += 'КПП: ' + item['p']+'\n'
except Exception:
    pass
itemParse += 'Дата регистрации: ' + item['r']+'\n'
и ещё, в 129 строке в replace('?') должен вот этот символ стоять unicode-table.com/ru/2753 но хабр его заменяет
Добавил обработку капч, с задержкой в 5 секунд они достаточно редко появляются + бонусом парсинг jsona от фнс

Заголовок спойлера
import requests, json, os, datetime, traceback, bs4, webbrowser; from time import sleep;
querys = ['7707510023', 'ООО Яндекс', '1057749528100']
s = requests.Session()
n = 0

for item in querys:
    query = querys[n]
    r = s.get("https://egrul.nalog.ru/index.html",
        headers={
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
            "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
            }
        )

    req = requests.Request(
        'POST',
        'https://egrul.nalog.ru/',
        data=b'vyp3CaptchaToken=&page=&query='+query.encode()+b'&region=&PreventChromeAutocomplete=', 
        headers = {
        "Host": "egrul.nalog.ru",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
        "Accept-Encoding": "gzip, deflate, br",
        "Referer": "https://egrul.nalog.ru/index.html",
        "Content-Type": "application/x-www-form-urlencoded",
        "X-Requested-With": "XMLHttpRequest"
        }
        )

    r = s.prepare_request(req)
    r = s.send(r)
    #print('31',r.text)
    item = json.loads(r.text)
    try:
        if item["ERRORS"] != '' and (item["ERRORS"])["captchaSearch"] != '':
            while True:
                r = s.get('https://egrul.nalog.ru/captcha-dialog.html',
                headers = {
                    "Host": "egrul.nalog.ru",
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
                    "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
                    "Referer": "https://egrul.nalog.ru/index.html",
                    "Pragma": "no-cache",
                    "Cache-Control": "no-cache"
                })
                b = bs4.BeautifulSoup(r.content.decode(),features="lxml").find('div',class_='field-data').find('img').get('src')
                #print('\r\n\r\nb =',b,'\r\n\r\n')
                webbrowser.open('https://egrul.nalog.ru' + b)
                ct = b.split('?a=')[1].split('&')[0]
                captcha = input('Введите капчу: ')
                #print('ct=',ct)

                r = requests.Request(
                'POST',
                'https://egrul.nalog.ru/captcha-proc.json',
                data=b'captcha='+captcha.encode()+b'&captchaToken='+ct.encode(), 
                headers = {
                    "Host": "egrul.nalog.ru",
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
                    "Accept": "application/json, text/javascript, */*; q=0.01",
                    "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
                    "Accept-Encoding": "gzip, deflate",
                    "Referer": "https://egrul.nalog.ru/index.html"
                    }
                )

                r = s.prepare_request(req)
                r = s.send(r)
                #print('captcha r', r.text)
                item = json.loads(r.text)

                try:
                    tr = False
                    if item["ERRORS"] != '':
                        tr = True
                except Exception as e:
                    print(e)
                    pass
                if tr == False: break
                

    except Exception as e:
        #print(e)
        pass
    t = json.loads(r.text)['t']

    sleep(0.5)

    r = s.get("https://egrul.nalog.ru/search-result/"+str(t),
        headers={
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
            "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
            "Referer": "https://egrul.nalog.ru/index.html"
            }
        )

    #print('95', r.text)
    jsn = json.loads(r.text)

    try:
        while True:
            if jsn['status'] != 'wait': break
            sleep(0.2)
    except Exception:
        pass

    try:
        item = (jsn["rows"])[0]
        itemParse = ''

        itemParse += item['n'] + '\n'
        itemParse += item['g'] + '\n'
        itemParse += 'Адрес: ' + item['a']+'\n'
        itemParse += 'ИНН: ' + item['i']+'\n'
        itemParse += 'ОГРН: ' + item['o']+'\n'
        itemParse += 'КПП: ' + item['p']+'\n'
        itemParse += 'Дата регистрации: ' + item['r']+'\n'

        try:
            itemParse += 'ДАТА ПРЕКРАЩЕНИЯ ДЕЯТЕЛЬНОСТИ: ' + item['e']+'\n'
        except Exception:
            pass

        if str(item['tot']) != '0':
            if len(item['n']) < 50: name = str(item['n'])
            else: name = str(item['i'])

            name = name.replace('"',"'").replace('\\','⧵').replace('/','⁄').replace('|','¦').replace(':',';').replace('*','✱').replace('?','').replace('<','«').replace('>','»')

            try:
                os.mkdir(name)
            except Exception:
                pass
                name = name + ' '+str(datetime.datetime.strftime(datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=3))),'%x %X %Z')).replace('/','.').replace(':','-')
                os.mkdir(name)

            f = open(name+'\\'+name+'.txt','w+',encoding='utf-8')
            f.write('по состоянию на ' + str(datetime.datetime.strftime(datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=3))),'%x %X %Z')).replace('/','.')+'\n'+str(itemParse))
            f.close()

            t = item['t']

            r = s.get("https://egrul.nalog.ru/vyp-request/"+str(t),
                headers={
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
                    "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
                    "Referer": "https://egrul.nalog.ru/index.html"
                    }
                )
            sleep(0.5)
            while True:
                r = s.get("https://egrul.nalog.ru/vyp-status/"+str(t),
                    headers={
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
                        "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
                        "Referer": "https://egrul.nalog.ru/index.html"
                        }
                    )
                st = json.loads(r.text)['status']
                if st == 'ready': break
                sleep(0.5)

            r = s.get("https://egrul.nalog.ru/vyp-download/"+str(t),
                    headers={
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
                        "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
                        "Referer": "https://egrul.nalog.ru/index.html"
                        }
                    )

            #print(r.text)

            f = open(name+'\\'+name+' выписка.pdf','wb+')
            f.write(r.content)
            f.close()
            n += 1
            sleep(5)

    except Exception as e:
        #print(e)
        traceback.print_exc()
        pass

Да, но ничто не мешает сделать цикл и небольшую задержку во избежание капч
сравните теперь длину кода;

Де-факто большинство кода распсывание HTTP заглоловков
requests, которые здесь использованы, к сожалению отваливаются из-за капч в дальнейшем;

С чего это вдруг? Попробую сегодня обработать и отпишусь
только один ИНН?

Не-а любой запрос для поиска ФНС т.е. ОГРН, ИНН или название
import requests, json, os, datetime, traceback; from time import sleep
inn = 6724005460 #инн из воздуха
s = requests.Session()

r = s.get("https://egrul.nalog.ru/index.html",
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
        "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
        }
    )

req = requests.Request(
    'POST',
    'https://egrul.nalog.ru/',
    data=b'vyp3CaptchaToken=&page=&query='+bytes(inn)+'&region=&PreventChromeAutocomplete=', # хабр почему то заменяет rеg в слове rеgion (буква е заменена на русскую) на знак ®, магия 
    headers = {
    "Host": "egrul.nalog.ru",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "https://egrul.nalog.ru/index.html",
    "Content-Type": "application/x-www-form-urlencoded",
    "X-Requested-With": "XMLHttpRequest"
    }
    )

r = s.prepare_request(req)
r = s.send(r)
#print(r.text)
t = json.loads(r.text)['t']

sleep(0.5)

r = s.get("https://egrul.nalog.ru/search-result/"+str(t),
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
        "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
        "Referer": "https://egrul.nalog.ru/index.html"
        }
    )

#print(r.text)
jsn = json.loads(r.text)

try:
    while True:
        if jsn['status'] != 'wait': break
        sleep(0.2)
except Exception:
    pass

try:
    item = (jsn["rows"])[0]
    if str(item['tot']) != '0':
        if len(item['n']) < 50: name = str(item['n'])
        else: name = str(item['i'])

        name = name.replace('"',"'").replace('\\','⧵').replace('/','⁄').replace('|','¦').replace(':',';').replace('*','✱').replace('?','').replace('<','«').replace('>','»')

        try:
            os.mkdir(name)
        except Exception:
            pass
            name = name + ' '+str(datetime.datetime.strftime(datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=3))),'%x %X %Z')).replace('/','.').replace(':','-')
            os.mkdir(name)

        f = open(name+'\\'+name+'.txt','w+',encoding='utf-8')
        f.write('по состоянию на ' + str(datetime.datetime.strftime(datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=3))),'%x %X %Z')).replace('/','.')+'\n'+str(item))
        f.close()

        t = item['t']

        r = s.get("https://egrul.nalog.ru/vyp-request/"+str(t),
            headers={
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
                "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
                "Referer": "https://egrul.nalog.ru/index.html"
                }
            )
        sleep(0.5)
        while True:
            r = s.get("https://egrul.nalog.ru/vyp-status/"+str(t),
                headers={
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
                    "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
                    "Referer": "https://egrul.nalog.ru/index.html"
                    }
                )
            st = json.loads(r.text)['status']
            if st == 'ready': break
            sleep(0.5)

        r = s.get("https://egrul.nalog.ru/vyp-download/"+str(t),
                headers={
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0",
                    "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
                    "Referer": "https://egrul.nalog.ru/index.html"
                    }
                )

        #print(r.text)

        f = open(name+'\\'+name+' выписка.pdf','wb+')
        f.write(r.content)
        f.close()

except Exception as e:
    print(e)
    traceback.print_exc()
    pass

Капча, обработка jsona с ответом и всякое такое в сделку не входит, но дописывается просто
Прячьтесь в бункер. РосКомПозор телеграмм банит
— Зло — это зло, Стрегобор, — серьёзно сказал ведьмак, вставая. — Меньшее, бо́льшее, среднее — всё едино, пропорции условны, а границы размыты. Я не святой отшельник, не только одно добро творил в жизни. Но если приходится выбирать между одним злом и другим, я предпочитаю не выбирать вообще.

Information

Rating
Does not participate
Location
Россия
Registered
Activity