Войдите, выбрав кнопку через селен в питоне - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь войти в свой аккаунт через по этой ссылке на веб-странице Market Watch через python и с помощью пакета селеном.Я могу выбрать кнопку «Войти» и нажать на нее, но ничего не происходит, и поэтому не могу получить доступ к нужной веб-странице.

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

<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("myemail@hotmail.com")
password.send_keys("***")

driver.find_element_by_xpath(".//*[contains(text(), 'Sign In')]").click()
driver.find_element_by_xpath(".//*[contains(text(), 'Yes, connect')]").click()

Где первый элемент должен находиться на кнопке входа в систему.Я не уверен насчет второго щелчка, но все же попробовал, но ничего не произошло.Может кто-нибудь, пожалуйста, скажите мне: 1) что я делаю не так 2) почему, когда я нажимаю на кнопку «Войти», ничего не происходит 3) В идеале, как преодолеть это

Любая помощь будет высоко ценится.Большое спасибо

Я тоже безуспешно пытался:

driver.find_element_by_css_selector("solid-button.basic-login-submit")

Ответы [ 4 ]

1 голос
/ 05 апреля 2019

Ваша попытка очень близка. Изменение кода с вашей попытки на

# 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 секунд. Это лучше, потому что дает странице время для загрузки.

1 голос
/ 05 апреля 2019

Попробуйте использовать следующий код. Это должно сработать. Предоставьте 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("myemail@hotmail.com")
password.send_keys("***")
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,"//button[@class='solid-button basic-login-submit']"))).click()

enter image description here

0 голосов
/ 05 апреля 2019

Даже после нажатия кнопки входа в систему я не вошел в систему. Я использовал ссылку href «login» из «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("myemail@hotmail.com")
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()
0 голосов
/ 05 апреля 2019

попробуй:

 driver.find_element_by_class_name('sign-in')
...