Как нажать кнопку «Создать учетную запись» на странице регистрации https://mail.protonmail.com/ с помощью Selenium и Python - PullRequest
0 голосов
/ 10 июля 2020

Все работает кроме кнопки. Не нажимается кнопка отправки. Может кто-нибудь мне помочь? Думаю, это может быть связано с тем, что я изменил рамку на «верхнюю». Но я не уверен, как его вернуть.

Код:

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
import time

url = 'https://protonmail.com/'

driver = webdriver.Chrome('/Users/edenhikri/Desktop/chromedriver')
driver.get(url)
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn.btn-default.btn-short'))).click()
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.panel-heading'))).click()
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#freePlan'))).click()

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.ID,'password'))).send_keys('test123')
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.ID,'passwordc'))).send_keys('test123')

WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,".top")))
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.ID,'username'))).send_keys('myUsername')

driver.find_element_by_class_name('btn.btn-submit').click()

ошибка:

no such element: Unable to locate element: {"method":"class name","selector":"btn.btn-submit"}

код кнопки:

<button type="submit" class="btn btn-submit" name="submitBtn">Create Account</button>

Я также пробовал использовать xpath, но получаю ту же ошибку, что не могу найти это:

driver.find_element_by_xpath("//button[@class=“btn btn-submit”]").click()

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Кнопка CREATE ACCOUNT находится внутри <iframe>, поэтому вам нужно:

  • Induce WebDriverWait для желаемого фрейм будет доступен и переключитесь на него .

  • Вызвать WebDriverWait , чтобы нужный элемент стал интерактивным .

  • Вы можете использовать следующие на основе Стратегии локатора :

    driver.get("https://protonmail.com/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.btn.btn-default.btn-short[href='signup']"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[data-plan='free']"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#freePlan"))).click()
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.top[title='Registration form']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#username"))).send_keys("Eden")
    driver.switch_to.default_content()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#password"))).send_keys("Eden")
    driver.find_element_by_css_selector("input#passwordc").send_keys("Eden")
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.bottom[title='Registration form']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.btn-submit"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Снимок браузера:

protonmail_create_user

0 голосов
/ 10 июля 2020

Используйте этот xpath // * [contains (text (), «Create Account»)]

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