Selenium не может найти элемент формы в календаре Google (Python) - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь импортировать события календаря в календарь Google через файл CSV, используя Selenium и Python.Я не могу выбрать элемент формы для ввода моего пути к файлу в Google.Я попытался найти элемент по xpath, cssselector и имени класса, и каждый раз получаю одну и ту же ошибку:

selenium.common.exceptions.NoSuchElementException: Сообщение: нет такого элемента: Невозможно найти элемент

fileElem = browser.find_element_by_xpath('//*[@id="YPCqFe"]/div/div/div/div[1]/div[1]/div/form')

Приведенный выше пример xpath был скопирован непосредственно через Google Chrome.Есть идеи, почему я не могу заставить это работать?Спасибо!Вот изображение элемента и HTML-код.

screenshot

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

измените xpath с помощью //form[@jsname="GBqgNb"]//input, но если все еще не удается найти, попробуйте добавить WebDriverWait()

# wait 5 second
fileElem = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH , '//form[@jsname="GBqgNb"]//input')))
fileElem.send_keys("/path/to/file")
0 голосов
/ 16 ноября 2018

Хорошо, поэтому я попробовал сам и обнаружил, что когда вы открываете этот конкретный URL, он перенаправляет вас на страницу входа в Google, на которой нет элемента с вашим XPath.Поэтому вы можете просто перейти на страницу входа и найти формы для имени пользователя и пароля, а затем использовать sendkeys() для ввода своего имени пользователя и пароля.Затем он должен перенаправить вас на нужную страницу, и XPath будет работать.

Используйте этот код:

from selenium import webdriver
import time

d = webdriver.Chrome("executable file path")

d.get("https://calendar.google.com/calendar/r/settings/export")
d.find_element_by_xpath('//*[@id="identifierId"]').send_keys("your email")
d.find_element_by_xpath('//*[@id="identifierNext"]').click() # Next button
time.sleep(0.5) # Sometimes the time it takes to load the next page will cause the next line to fail
d.find_element_by_xpath('//*[@id="password"]/div[1]/div/div[1]/input').send_keys("your password")
d.find_element_by_xpath('//*[@id="passwordNext"]').click() # Next button
d.find_element_by_xpath('//*[@id="YPCqFe"]/div/div/div/div[1]/div[1]/div/form/label') #Now you have the proper element
...