Я пытаюсь войти в свою учетную запись через эта ссылка на веб-странице Market Watch через Python и с помощью пакета Selenium. Я могу выбрать кнопку «Войти» и нажать на нее, но ничего не происходит, и поэтому я не могу получить доступ к нужной мне веб-странице.
Я думаю, что моя ошибка связана с тем, что я, возможно, не выбираю правильную кнопку. Код элемента следующий:
<div class = "sign-in">
<button class = "solid-button basic-login-submit">
<span class = "text" data-token = "signIn" token-title = "signIn" title = "Sign In">
Sign In
</span>
</button>
</div>
<div class = "create-connect" style = "display: none;">
<button class = "solid-button basic-login-connect">
<span class = "text" data-token = "yesConnect">
Yes, connect
</span>
</button>
...some other buttons for facebook connection
Мой код следующий:
driver.get("https://sso.accounts.dowjones.com/login?state=g6Fo2SBQQURPVkxkcTR0RW1zX21NSmxLY3F4Q2RoUm5QTWV4UaN0aWTZMmdhRm8yU0IwUW01dVV6WjJiVXhVUmtaRVRXd3dlamM1UVdjNVIweExiVFJVYlc5WFl3o2NpZNkgNWhzc0VBZE15MG1KVElDbkpOdkM5VFhFdzNWYTdqZk8&client=5hssEAdMy0mJTICnJNvC9TXEw3Va7jfO&protocol=oauth2&prompt=login&scope=openid%20idp_id%20given_name%20family_name%20email%20djid%20prts&response_type=code&redirect_uri=https%3A%2F%2Faccounts.marketwatch.com%2Fauth%2Fsso%2Flogin&nonce=ac689d94-8b8f-4e6d-9255-439f58fc3c0f&connection=DJldap&ui_locales=en-us-x-mw-3-8&ns=prod%2Faccounts-mw#!/signin") #this is the link above
username = driver.find_element_by_id("username")
password = driver.find_element_by_id("password")
username.send_keys("[email protected]")
password.send_keys("***")
driver.find_element_by_xpath(".//*[contains(text(), 'Sign In')]").click()
driver.find_element_by_xpath(".//*[contains(text(), 'Yes, connect')]").click()
Где первый элемент должен быть на кнопке входа. Я не уверен насчет второго щелчка, но я все равно попробовал, и все равно ничего не произошло.
Мне интересно узнать:
Я также безуспешно пробовал:
driver.find_element_by_css_selector("solid-button.basic-login-submit")






пытаться :
driver.find_element_by_class_name('sign-in')
Попробуйте использовать следующий код. Это должно работать. Предоставьте WebdriverWait после вставки значения в тестовое поле.
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
driver=webdriver.Chrome()
driver.get("https://sso.accounts.dowjones.com/login?state=g6Fo2SBQQURPVkxkcTR0RW1zX21NSmxLY3F4Q2RoUm5QTWV4UaN0aWTZMmdhRm8yU0IwUW01dVV6WjJiVXhVUmtaRVRXd3dlamM1UVdjNVIweExiVFJVYlc5WFl3o2NpZNkgNWhzc0VBZE15MG1KVElDbkpOdkM5VFhFdzNWYTdqZk8&client=5hssEAdMy0mJTICnJNvC9TXEw3Va7jfO&protocol=oauth2&prompt=login&scope=openid%20idp_id%20given_name%20family_name%20email%20djid%20prts&response_type=code&redirect_uri=https%3A%2F%2Faccounts.marketwatch.com%2Fauth%2Fsso%2Flogin&nonce=ac689d94-8b8f-4e6d-9255-439f58fc3c0f&connection=DJldap&ui_locales=en-us-x-mw-3-8&ns=prod%2Faccounts-mw#!/signin") #this is the link above
username = driver.find_element_by_id("username")
password = driver.find_element_by_id("password")
username.send_keys("[email protected]")
password.send_keys("***")
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,"//button[@class='solid-button basic-login-submit']"))).click()
Даже после того, как была нажата кнопка входа, я не вошел в систему. Я использовал ссылку href «вход» из «https://www.marketwatch.com/», и это сработало.
from selenium import webdriver
from selenium.webdriver import Firefox
from time import sleep
driver = webdriver.Firefox(executable_path=r'C:\\Py\\geckodriver.exe');
# driver.get('https://sso.accounts.dowjones.com/login?state=g6Fo2SBJbUhZMUdPZlJfOEJSRWgxLVVFNXhoR3E5cFdaVlI4dKN0aWTZMmdhRm8yU0JaV0ZCWVluSmxNM2c0UjJSVk4wNXFlSHByUW5SUU1sRnpjMjFDVkVoeFNno2NpZNkgNWhzc0VBZE15MG1KVElDbkpOdkM5VFhFdzNWYTdqZk8&client=5hssEAdMy0mJTICnJNvC9TXEw3Va7jfO&protocol=oauth2&prompt=login&scope=openid%20idp_id%20roles%20email%20given_name%20family_name%20djid%20djUsername%20djStatus%20trackid&response_type=code&redirect_uri=https%3A%2F%2Faccounts.marketwatch.com%2Fauth%2Fsso%2Flogin&nonce=4b5092ee-62d1-47cb-a16e-2ceb396b059c&connection=DJldap&ui_locales=en-us-x-mw-0&mg=ss-ngx#!/signin')
driver.get('https://accounts.marketwatch.com/login?target=https%3A%2F%2Fwww.marketwatch.com%2F')
sleep(5)
username = driver.find_element_by_id("username")
password = driver.find_element_by_id("password")
username.send_keys("[email protected]")
password.send_keys("***")
sign_in = driver.find_element_by_xpath(".//*[@id='basic-login']/div[1]/form/div/div[7]/div[1]/button")
sign_in.click()
Ваша попытка очень близка. Изменение кода с вашей попытки на
# You'll need to import these dependencies
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
button = WebDriverWait(driver,1000).until(By.CSS_SELECTOR,"button.solid-button.basic-login-submit")
button.click()
WebDriverWait(0,1000) заставляет программу искать элемент 1000 секунд. Это лучше, потому что дает время для загрузки страницы.
Сейчас это не работает, username.send_keys тоже будет неправильно.
Судя по HTML-коду на этой странице, у
<form>нет атрибута действия, поэтому я уверен, что JavaScript прослушивает события onclick или onsubmit. Нажатие этого с помощью Selenium может неправильно запускать события DOM. Возможно, вы захотите попробовать вызвать событие клика с помощью JavaScript.