Yahoo войти в систему с Selenium, отсутствует щелчок - PullRequest
2 голосов
/ 18 февраля 2020

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

Мне известны различные способы выбора элементов с помощью css, id, имени класса, xpath и т. Д. c ... Я пробовал sleep (), implicit_wait (), что-то в этом духе. Я также пытался что-то с ожиданием, пока не кликабельно с модулем ожидаемых условий от selenium.webdriver.

Я прикрепил изображение того, что у меня есть. Моя python версия актуальна, так же как и мои селеновые и chrome установки драйверов. Я уже видел похожий пост, но ОП, похоже, не сталкивался с моей проблемой. ( как щелкнуть по ссылке для входа в Yahoo с помощью веб-драйвера selenium? )

Я тоже это попробовал, и он открывает рекламу; в моих казнях Нортон кажется наиболее часто появляющейся рекламой. ( войдите в Yahoo, используя Python Selenium )

Я просмотрел документацию по API, но, похоже, нет четкого указания, что я мог бы сделать. Я приложил скриншоты того, что происходит при запуске скрипта, а также код, который у меня есть.

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

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from login import password, email
from time import sleep

class yahoo():

def __init__(self):

    # INITIALIZE CHROME WEBDRIVER
    self.driver = webdriver.Chrome()
    self.driver.maximize_window()

def login(self):

    # OPEN BROWSER TO LOGIN PAGE AND MAXIMIZE
    self.driver.get("https://login.yahoo.com/config/login?.\
    src=fpctx&.intl=us&.lang=en-US&.done=https://www.yahoo.com")
    # LOGIN ACTIONS

    {# 1. send email address and click next
    self.driver.find_element_by_id('login-username').send_keys(email)
    element = WebDriverWait(self.driver, 10).until(\
            EC.presence_of_element_located((By.ID, "login-signin")))
    element.click()

    # 2. send password and click sign in
    self.driver.find_element_by_xpath('//*[@id="login-passwd"]').send_keys(password)
    self.driver.find_element_by_id('login-signin').click()}`enter code here




x = yfscreeners()
x.login()

Любая помощь хорошо ценится.

Norton advertisement instead of next form

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Чтобы отправить последовательность символов в поле Адрес электронной почты и вызвать 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()
    
  • Использование 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()
    
  • Снимок браузера:

yahoo_email_clicking

0 голосов
/ 18 февраля 2020

Используйте WebDriverWait для поля электронной почты

wait = WebDriverWait(self.driver, 10)
wait.until(EC.visibility_of_element_located((By.ID, 'login-username'))).send_keys(email)
wait.until(EC.visibility_of_element_located((By.ID, 'login-signin'))).click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...