我正在尝试为带有自定义信息的网页创建日历。我没有足够强大的 CSS 背景来构建像样的日历,所以我求助于 Google 嵌入式日历。我的网页有指向我帐户的日历链接,但我想导入我自己的 ical 文件。该文件是在脚本中自动生成的,我想添加导入 .ics 的功能。我目前使用 selenium 访问页面 ( https://calendar.google.com/calendar/r/settings/export?tab=wc ),但我无法让 selenium 捕获我选择文件的窗口。我的下一个想法是将文件路径写入输入部分,然后单击导入按钮,但导入标签被隐藏,我似乎无法找到让 selenium 找到它的方法。我的下一个解决方案是使用 requests.post,但没有明确的 url 可以发布到。我被卡住了,所以如果能帮助解决这四个问题中的任何一个,我们将不胜感激!
问题:
1) 带有事件信息的体面日历,易于用 css 和 html 编码,或者可以嵌入并接受 .ics 的日历
2) 一种捕获文件资源管理器窗口以键入我自己的路径的方法
3) 找到隐藏的输入标签以将文件路径放入(以及如何确保文件已上传)
4) 找到POST方法调用的服务器的url
最佳答案
虽然我无法回答您所有的 4 个问题,但我可以帮助解决 #3:
# find the input
input = driver.find_element_by_xpath("//input[@type='file']")
# execute script to reveal hidden element -- this part might be optional
driver.execute_script("arguments[0].style.display = 'block';", input)
# send file path keys to the input
input.send_keys("C:/Path/To/Your/File")
# verify if the upload was successful
uploaded_file = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//input[@type='file']/preceding-sibling::span[not(contains(@aria-hidden, 'true'))]")))
if (uploaded_file.text == file_name): # file_name is the name of file, like Test.txt
print("File upload was successful")
此代码将找到接受您的文件上传的 input
元素,并执行一些 Javascript 以显示该元素——这适用于任何 ElementNotVisible
或 ElementNotInteractable
我们可能遇到的异常。然后,我们 send_keys
到输入元素——它接受您尝试上传的元素的完整绝对文件路径。
然后,我们通过检查出现的包含上传文件名称的 span
元素来验证上传。如果此元素存在,并且其 .text
属性等于您上传的文件的名称(如 Test.txt
),则上传成功。
uploaded_file.text
返回 Select file from your computer
。文件上传成功后,此文本将更改为 Test.text
。
希望对您有所帮助。
关于python - 使用自定义信息填写日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942346/