Почему определение моего кода приводит к неправильной работе при автоматизации входа на веб-сайт? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть небольшой код, который работает для автоматического входа кого-то в его электронную почту Outlook в браузере chrome. Пользователь должен будет ввести свой адрес электронной почты и пароль в код, чтобы он работал. Он работает нормально, пока я не попытаюсь определить тело кода, чтобы сделать его более чистым и позволить писать больше кода под ним, не вмешиваясь в функцию.

from selenium import webdriver
import time

def outlook():
    driver = webdriver.Chrome()
    x = 'https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=13&ct=1592499273&rver=7.0.6737.0&wp=MBI_SSL&wreply=https%3a%2f%2foutlook.live.com%2fmail%2f0%2finbox%3fRpsCsrfState%3d8a0340e9-f9ec-d8ca-1b7d-c36e5fc0520f%26wa%3dwsignin1.0%26nlp%3d1&id=292841&aadredir=1&CBCXT=out&lw=1&fl=dob%2cflname%2cwld&cobrandid=90015'
driver.get(x)

    loginBox = driver.find_element_by_xpath('//*[@id="i0116"]')
    loginBox.send_keys('email')

    loginButton = driver.find_element_by_xpath('//*[@id="idSIButton9"]')
    loginButton.click()

    passBox = driver.find_element_by_xpath('//*[@id="i0118"]')
    passBox.send_keys('password')

    time.sleep(2)

    passButton = driver.find_element_by_xpath('//*[@id="idSIButton9"]')
    passButton.click()

outlook()

Функция time.sleep вызвана тем, что нажатие кнопки не регистрируется, когда код выполняется слишком быстро. Проблема в том, что приведенный выше код с определенной функцией работает нормально, но закрывает окно chrome, которое создается после входа в систему. Если я удалю 'outlook ()' и 'def outlook ():', он будет работать нормально, не закрывая chrome окно.

Мне интересно, почему это так и есть ли обходной путь.

1 Ответ

0 голосов
/ 18 июня 2020

Попробуйте вытащить экземпляр webdriver. Я думаю, что сборщик мусора - это единственное, что имеет смысл.

edit: Кроме того, driver.get (x) должен иметь отступ, я почти уверен. Кроме того, вы можете столкнуться с проблемами, связанными с устареванием драйвера. Я бы настроил все как:

с помощью webdriver. Chrome () как драйвер: outlook ()

(И удалите исходный драйвер = webdriver. Chrome ())

from selenium import webdriver
import time

driver = webdriver.Chrome()
def outlook():
    x = 'https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=13&ct=1592499273&rver=7.0.6737.0&wp=MBI_SSL&wreply=https%3a%2f%2foutlook.live.com%2fmail%2f0%2finbox%3fRpsCsrfState%3d8a0340e9-f9ec-d8ca-1b7d-c36e5fc0520f%26wa%3dwsignin1.0%26nlp%3d1&id=292841&aadredir=1&CBCXT=out&lw=1&fl=dob%2cflname%2cwld&cobrandid=90015'
    driver.get(x)

    loginBox = driver.find_element_by_xpath('//*[@id="i0116"]')
    loginBox.send_keys('email')

    loginButton = driver.find_element_by_xpath('//*[@id="idSIButton9"]')
    loginButton.click()

    passBox = driver.find_element_by_xpath('//*[@id="i0118"]')
    passBox.send_keys('password')

    time.sleep(2)

    passButton = driver.find_element_by_xpath('//*[@id="idSIButton9"]')
    passButton.click()

outlook()

...