硒无法在Google日历中找到表单元素(Python)

时间:2018-11-16 01:38:59

标签: python selenium gcal

我正在尝试使用Selenium和Python通过csv文件将日历事件导入到Google日历中。我无法选择表单元素以将我的文件路径输入到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 :(得分:0)

好,所以我自己尝试了一下,发现当您打开该特定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

答案 1 :(得分:0)

使用//form[@jsname="GBqgNb"]//input更改xpath,但是如果仍然找不到,请尝试添加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")