Не могу найти элемент Selenium - PullRequest
2 голосов
/ 02 мая 2020

Я пытаюсь заполнить формы на странице создания Gmail. Но по какой-то причине мой драйвер не может найти код. Я использовал все параметры, путь, идентификатор, имя, имя класса, но ничего не работает

chrome_driver = './chromedriver'   
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome_driver)


driver.get('https://www.google.com/intl/nl/gmail/about/#')

try:
    print('locating create account button')
    create_account_button = driver.find_element_by_class_name('h-c-button')
except:
    print("error, couldn't find create account button")
try:
    create_account_button.click()
    print('navigating to creation page')
except:
    print('error navigating to creation page')
time.sleep(15)

first_name_form = driver.find_element_by_class_name('whsOnd zHQkBf')

(сон просто временный, чтобы убедиться, что он загружается полностью, я знаю, что он не эффективен)

вот ссылка на страницу Gmail: https://accounts.google.com/signup/v2/webcreateaccount?service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F%3Fpc%3Dtopnav-about-n-en&flowName=GlifWebSignIn&flowEntry=SignUp

Это ошибка, которую я получаю:

Exception has occurred: NoSuchElementException
Message: no such element: Unable to locate element: {"method":"css 
selector","selector":".whsOnd zHQkBf"}
  (Session info: chrome=81.0.4044.129)

Спасибо за ваше помощь

1 Ответ

1 голос
/ 03 мая 2020

Я нашел вашу ошибку, и у меня есть решение для вас. Позвольте мне сначала определить вам проблему. Когда вы нажимаете «Создать новую учетную запись», открывается новое окно. НО ваш бот все еще не понимает, что вы находитесь в первом окне (в том, которое вы нажимаете на первую кнопку, чтобы создать учетную запись). Таким образом, бот пытается увидеть, есть ли ввод имени. Вот почему терпит неудачу. Таким образом, решение заключается в том, что вы должны изменить окно, которое вы хотите указать. То, как вы можете это сделать, записано внутри блока кода.

CODE

from selenium import webdriver
import time

path = '/home/avionerman/Documents/stack'
driver = webdriver.Firefox(path)

driver.get('https://www.google.com/intl/nl/gmail/about/#')

try:
    print('locating create account button')
    create_account_button = driver.find_element_by_class_name('h-c-button')
except:
    print("error, couldn't find create account button")
try:
    create_account_button.click()
    print('navigating to creation page')
except:
    print('error navigating to creation page')
time.sleep(15)

# Keeping all the windows into the array named as handles
handles = driver.window_handles

# Keeping the size of the array in order to know how many windows are open
size = len(handles)

# Switch to the second opened window (id:1)
driver.switch_to.window(handles[1])

# Print the title of the current page in order to validate if it's the proper one
print(driver.title)

time.sleep(10)



first_name_input = driver.find_element_by_id('firstName')
first_name_input.click()
first_name_input.send_keys("WhateverYouWant")

last_name_input = driver.find_element_by_id('lastName')
last_name_input.click()
last_name_input.send_keys("WhateverYouWant2")

username_input = driver.find_element_by_id('username')
username_input.click()
username_input.send_keys('somethingAsAUsername')

pswd_input = driver.find_element_by_name('Passwd')
pswd_input.click()
pswd_input.send_keys('whateveryouwant')

pswd_conf_input = driver.find_element_by_name('ConfirmPasswd')
pswd_conf_input.click()
pswd_conf_input.send_keys('whateveryouwant')

time.sleep(20)

Итак, если вы введете go в строку 21, вы увидите, что У меня есть несколько комментариев, чтобы рассказать вам, что делают эти строки (с 21 по 31).

Кроме того, я вставил весь необходимый вам код (имя, фамилия и т. Д. c) , Вам нужно только найти кнопку создания (последнюю).

Примечание : попробуйте использовать идентификаторы в таких случаях, а не имена классов (когда идентификаторы ясны и уникальны), как я уже сделал для тебя.

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