【问题标题】:Filling out a calendar with custom information使用自定义信息填写日历
【发布时间】:2019-11-19 20:31:05
【问题描述】:

我正在尝试为包含自定义信息的网页创建日历。我没有足够强大的 css 背景来构建一个像样的日历,所以我转向了谷歌嵌入式日历。我的网页有一个指向我帐户的日历链接,但我想导入我自己的 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

【问题讨论】:

  • 我在这里有点困惑。您是要编写自己的日历,还是要使 Google 日历自动化?在一篇文章中提出 4 个问题通常不是最好的提问方式,尤其是当问题的性质完全不同时。我不确定这里的最终目标是什么。
  • 我正在尝试在我的网站上获取包含我的活动的日历,我有两种可能的解决方案。第一个是编写我自己的日历,但我不知道如何让它看起来不错,所以我正在寻找一个彻底的指南或其他东西。由于这似乎是一个死胡同,我尝试自动化谷歌日历,因为我可以将它嵌入到我的网站中。 TLDR 我尝试了其他东西,但现在我正在自动化谷歌日历

标签: python html css selenium python-requests


【解决方案1】:

虽然我无法回答您的所有 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 来显示该元素——这可以解决我们可能遇到的任何ElementNotVisibleElementNotInteractable 异常。然后,我们 send_keys 输入元素 - 它接受您尝试上传的项目的完整绝对文件路径。

然后,我们通过检查出现的span 元素来验证上传,其中包含上传文件的名称。如果该元素存在,并且其.text属性等于您上传的文件的名称(如Test.txt),则上传成功。

如果文件没有上传,uploaded_file.text 返回Select file from your computer。文件上传成功后,该文本变为Test.text

希望这会有所帮助。

【讨论】:

  • 非常感谢您的帮助!我让它工作了,所以现在我只需要弄清楚我的 .ics 文件有什么问题。也为我的问题的困惑道歉,我认为拥有多种可能的解决方案可能会给我一个更快的解决方案(尽管这对我来说已经足够快了)
猜你喜欢
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 2018-01-27
  • 2011-04-17
  • 1970-01-01
相关资源
最近更新 更多