Как я могу войти в Yahoo FInance, используя Python Selenium? - PullRequest
0 голосов
/ 27 апреля 2020

Я попробовал следующий способ, но каждый раз, когда я нажимаю кнопку "Далее" в логине , хромдрайвер открывает новую вкладку и перенаправляет меня на эту страницу,

from selenium import webdriver

path = "https://login.yahoo.com/config/login?.src=finance&.intl=us&.lang=en-US&.done=https%3A%2F%2Ffinance.yahoo.com%2Fquotes%2Flogin%2Fview%2Fv1%2F"
option = webdriver.Chrome()
option.add_argument("--incognito")
option.add_argument("--disable-notifications")
browser = webdriver.Chrome("/path/to/chromedriver", optiont=option)
browser.get(path)
browser.find_element_by_name("username").send_keys("username")

# all three attempts below redirected me to the page mentioned above
browser.find_element_by_name("signin").click()
browser.find_element_by_class_name("button-container").click()
browser.find_element_by_id("login-username-form").click()

Интересно, это какая-то защита, которую они имеют, учитывая перенаправленную страницу.

Я также пытался отправить пароль в hidden-input-container

browser.find_element_by_name("passwd").send_keys("password")

для получить selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable ошибка. Я думаю, мне нужно нажать кнопку «Далее» перед отправкой пароля.

Буду очень признателен за любую помощь в этом вопросе.

1 Ответ

1 голос
/ 27 апреля 2020

Индуцируйте WebDriverWait () и ждите element_to_be_clickable ()

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

path = "https://login.yahoo.com/config/login?.src=finance&.intl=us&.lang=en-US&.done=https%3A%2F%2Ffinance.yahoo.com%2Fquotes%2Flogin%2Fview%2Fv1%2F"
option = Options()
option.add_argument("--incognito")
option.add_argument("--disable-notifications")
browser = webdriver.Chrome(executable_path="/path/to/chromedriver",options=option)
browser.get(path)
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.NAME,"username"))).send_keys("validusername")
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.NAME,"signin"))).click()
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.NAME,"password"))).send_keys("password")
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.ID,"login-signin"))).click()

Снимок браузера:

enter image description here

...