Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 7, 2020 14:36:23

vipTelnet
Зарегистрирован: 2019-08-21
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

pexpect не может найти метку поля getpass

Здравствуйте.
Есть задача автоматизировать авторизацию в python скрипте

Код скрипта в котом нужно пройти авторизацию.

 import getpass
import time
time.sleep(1)
login = input('Please enter your login: ')
print('login '+login)
time.sleep(1)
code = input('Please enter the code you received: ')
print('code '+code)
time.sleep(1)
password = getpass.getpass('Please enter your password: ')
print('password '+password)
print('Signed in successfully as '+login)

Я с начала пытался делать это через subprocess.Popen но там через поле getpass вообще было не пройти.
Поэтому начал читать в инете и нашел что можно в принципе это сделать через библиотеку pexpect
Код скрипта который пытается пройти авторизацию
 import pexpect
from pexpect import popen_spawn
import time
import sys
login = 'nickname'
code = '12345'
password = 'secret'
command = "python auth.py"
print(command)
child = pexpect.popen_spawn.PopenSpawn(command)
child.logfile = sys.stdout.buffer
#enter login
try:
    child.expect('Please enter your login: ')  
except pexpect.exceptions.TIMEOUT:
    print('Already auth')
    sys.exit()
child.sendline(login)
#enter code
child.expect('Please enter the code you received: ')
child.sendline(code)
#enter password
child.expect('Please enter your password: ')
child.sendline(password)
i = child.expect(['Signed in successfully.*',])
if i==0:
    print('success Signed')

Вывод этого скрипта
python auth.py
Please enter your login: nickname
login nickname
Please enter the code you received: 12345
Please enter your password: Traceback (most recent call last):
File “.\check.py”, line 24, in
child.expect('Please enter your password: ‘)
File “C:\Users\Telnet\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pexpect\spawnbase.py”, line 343, in expect
return self.expect_list(compiled_pattern_list,
File “C:\Users\Telnet\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pexpect\spawnbase.py”, line 372, in expect_list
return exp.expect_loop(timeout)
File “C:\Users\Telnet\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pexpect\expect.py”, line 181, in expect_loop
return self.timeout(e)
File “C:\Users\Telnet\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pexpect\expect.py”, line 144, in timeout
raise exc
pexpect.exceptions.TIMEOUT:
searcher: searcher_re:
0: re.compile(b’Please enter your password: ‘)

searcher: searcher_re:
0: re.compile(b’Please enter your password: ')

То есть как видно он нормально отправляет логин и код, но вот когда нужно найти
Please enter your password:
он его не находит.
Прошу помочь мне разобраться в чем может быть проблема.

Офлайн

#2 Фев. 8, 2020 16:06:13

vipTelnet
Зарегистрирован: 2019-08-21
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

pexpect не может найти метку поля getpass

Авторизоваться получилось лишь после того как я зашел в тот скрипт и руками там исправил getpass на обычный input
Знаю что это не вариант, но как по другому пройти это поле на Windows я так и не придумал

Офлайн

#3 Фев. 8, 2020 20:10:18

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

pexpect не может найти метку поля getpass

По идее есть более крутой способ: `python3 urscript.py | echo -en “login\ncode\npassword\n”`



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#4 Фев. 21, 2020 08:10:11

vipTelnet
Зарегистрирован: 2019-08-21
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

pexpect не может найти метку поля getpass

По идее есть более крутой способ: `python3 urscript.py | echo -en “login\ncode\npassword\n”`

Что то не понял о чем Вы пишите, если можно распишите все подробнее
Это команда которую типа python в терминале исполняет?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version