Найти - Пользователи
Полная версия: pexpect не может найти метку поля getpass
Начало » Python для новичков » pexpect не может найти метку поля getpass
1
vipTelnet
Здравствуйте.
Есть задача автоматизировать авторизацию в 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:
он его не находит.
Прошу помочь мне разобраться в чем может быть проблема.
vipTelnet
Авторизоваться получилось лишь после того как я зашел в тот скрипт и руками там исправил getpass на обычный input
Знаю что это не вариант, но как по другому пройти это поле на Windows я так и не придумал
DamMercul
По идее есть более крутой способ: `python3 urscript.py | echo -en “login\ncode\npassword\n”`
vipTelnet
По идее есть более крутой способ: `python3 urscript.py | echo -en “login\ncode\npassword\n”`

Что то не понял о чем Вы пишите, если можно распишите все подробнее
Это команда которую типа python в терминале исполняет?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB