Завершение входа в Yahoo с селеном мимо пароля Кнопка «Далее» - PullRequest
0 голосов
/ 25 февраля 2020

Итак, я первоначально разместил здесь сообщение о проблеме, нажав «Далее», чтобы продолжить вход в мою учетную запись Yahoo. (Исходное сообщение: Yahoo выполняет вход с помощью Selenium, отсутствует щелчок )

Я получил его на работу и смог войти в систему с кодом ниже на прошлых выходных, войдя в свой аккаунт, но сегодня, когда я пошел, чтобы показать своему профессору этот побочный проект, логин не сработал, потому что мой клик не прошел после ввода пароля. Вместо того, чтобы пройти «Далее», чтобы ввести пароль и завершить регистрацию, он нажимает на рекламу, я думаю, за окном формы. Изображение прикреплено ниже, например, но вот код, который работал изначально:

def login(self):

    # SEND EMAIL KEYS
    WebDriverWait(self.driver, 3).until(EC.element_to_be_clickable(\
        (By.XPATH, "//input[@class='phone-no ' and @id='login-username']"))).send_keys(email)
    # CLICK NEXT
    self.driver.find_element_by_xpath("//input[@id='login-signin']").submit()
    self.driver.implicitly_wait(5)
    # SEND PASSWORD KEYS
    self.driver.implicitly_wait(5)
    WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable(\
        (By.XPATH, '//*[@id="login-passwd"]'))).send_keys(password)
    # CLICK NEXT
    WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable(\
       (By.CSS_SELECTOR, '[class=button-container]'))).click()

Вместо этого он нажимает на рекламу, а не на кнопку в поле формы. В результате открывается совершенно другая вкладка, связанная с рекламой, будь то Norton или FreePass и т. Д. c ...

Я пытался исправить это в рабочее время, но ничего из этого не получалось. Я попробовал NAME, XPATH, CLASS, ID и т. Д. c ... Возможно, я неправильно их назвал, я забыл, что есть что, но я возвращался к документации, пробуя разные селекторы, и да, используя их правильно. Я попытался неявно_wait вместо того, чтобы использовать класс ExpectedConditions, но ничего из этого не сработало.

Однако вместо этого я попробовал приведенный ниже код:

def login(self):

    # SEND EMAIL KEYS
    WebDriverWait(self.driver, 3).until(EC.element_to_be_clickable(\
        (By.XPATH, "//input[@class='phone-no ' and @id='login-username']"))).send_keys(email)
    # CLICK NEXT
    self.driver.find_element_by_xpath("//input[@id='login-signin']").submit()
    self.driver.implicitly_wait(5)
    # SEND PASSWORD KEYS
    self.driver.implicitly_wait(5)
    WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable(\
        (By.XPATH, '//*[@id="login-passwd"]'))).send_keys(password)
    # CLICK NEXT
    self.driver.implicitly_wait(20)
    try:
        element = WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable(\
                                                        (By.ID, 'login-signin')))
    finally:
        self.driver.quit()

    element.click()

И затем я получаю странное исключение: "HTTPConnectionPool (host = '127.0.0.1', port = 36561): Максимальное количество попыток превышено с помощью url: / session / 13fbff99fe85a470c34475fd6186b0cb / element / 23be378e-9643-4f16-8c74-7647e9d80ff8 / click (вызвано NewConnectionError (': не удалось установить sh новое соединение: соединение отклонено) 111 ) "

Понятия не имею, что происходит. Мой оригинальный проект работал отлично дома, проходя все клики и представления и удаляя различные всплывающие окна, но теперь это не работает. Я устала запускать его в точке доступа моего телефона, которая лучше, чем в общежитии Wi-Fi моей школы, и в моем домашнем Wi-Fi тоже, но он все еще не работает и вместо этого нажимает на рекламу.

Я также только что попробовал приведенный ниже фрагмент вместо элемента ожидания для нажатия:

 element = WebDriverWait(self.driver, 20).until(EC.visibility_of_element_located(\
                                                        (By.ID, 'login-signin')))

Это тоже не сработало, браузер открывается и закрывается и выдает мне ту же ошибку соединения, которую я описал.

Может ли это быть связано с моим rnet соединением?

Обратите внимание, что ключи моего пароля отправляются правильно. enter image description here

В остальном все равно с точки зрения обновленного драйвера для chromedriver, работающего на linux. С предпоследней версией Ubuntu на сегодняшний день. Пожалуйста, помогите, спасибо. Мой python3 обновлен до последней версии, которую поддерживает linux, не превращая мой компьютер в ма sh картошку.

1 Ответ

0 голосов
/ 02 марта 2020

Чтобы отправить последовательность символов сначала в поле Адрес электронной почты , вызовите click() на кнопке с текстом Далее , отправьте последовательность символов на Пароль и снова вызовите click() на кнопке с текстом Далее , вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любой из следующих Стратегии локатора :

  • Использование css_selector:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')   
    driver.get('https://login.yahoo.com')
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.phone-no#login-username"))).send_keys('my_username@yahoo.co.in')
    driver.find_element_by_css_selector("input#login-signin").submit()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#password-container>input"))).send_keys('RichardYim')
    driver.execute_script("arguments[0].click();", driver.find_element_by_css_selector("button#login-signin"))
    
  • Использование xpath:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')   
    driver.get('https://login.yahoo.com')
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='phone-no ' and @id='login-username']"))).send_keys('my_username@yahoo.co.in')
    driver.find_element_by_xpath("//input[@id='login-signin']").submit()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='password-container']/input"))).send_keys('RichardYim')
    driver.execute_script("arguments[0].click();", driver.find_element_by_xpath("//button[@id='login-signin']"))
    
  • Снимок браузера:

yahoo_password_next


tl; dr

MaxRetryError: HTTPConnectionPool: превышено максимальное количество попыток (вызвано ProtocolError («Соединение прервано», ошибка (111, «Соединение отклонено»)))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...