使用Selenium,Cron和Python记录虚拟种族结果

2021-04-18 18:25:37

谁讨厌做你知道的重复任务可以自动化?我知道我做♥。这是关于我如何使用Cron作业和Python照顾“无聊的东西”(链接到第1部分)的第二部分。在本文中,我将讨论如何使用strava的API和Cron作业,以自动发布Runsignup上的虚拟比赛的新活动。

冠状病毒导致我们所有的户外人员都能创造着我们如何继续我们的比赛。世界上虚拟的Circumpolar竞赛(简短的爬行)是结果之一。对于这场比赛,您必须跟踪所有徒步旅行/自行车/运行/ etc,然后通过runsignup在线在线记录它们。

这不是一个非常长的或复杂的过程,但我无法克服它的感觉太长了。如果Strava已经追踪了这些活动,为什么我不能刚刚争取争夺统一,而不是自己进入它?

在本节中,我将分解各种函数,以组成弥补从Strava下载活动的Python程序并将其上传到爬行。当文件crawactivities.py运行时,它们都在用一点点Python胶水执行。

此功能处理访问应用程序的令牌.JSON文件,该文件提供对strava API的访问。它检查令牌是否已过期,并调用refresh_token()如果是,请拨打新令牌。

此函数使请求GET请求strava的“活动”端点,该端点返回由emputeactivity对象的数组组成的JSON对象。文档中此端点没有具体定义,但它与“列出运动员活动”端点类似。该函数使用'& after ='参数来仅请求在最后一次Cron ran ran ran ran ran ran ran ran的活动(此时间存储在.env文件中并在程序结束时更新)。

使用Selenium上传所有活动的最简单方法是上传所有数据的CSV。如果Selenium必须通过“手”将每个活动输入每个活动,则这两个按钮点击,而不是五加。

如果strava返回的JSON对象不是空的,并且有新的活动上传,则此功能将数据放在CSV中。它需要Strava返回的JSON对象,并使用CSV.DictWriter将活动的日期,距离和类型写入CSV(忽略所有其他数据点)。此功能还重新格式化此数据一部分以匹配RunSignup所需的格式。

这是魔法发生的地方。 Selenium基本上是一系列通过各种方法查找元素(您的Web浏览器的开发人员工具对此有所帮助),然后用元素做点什么。此函数打开了Chrome Web浏览器实例,导航到Craw Activity Upload页面,验证,上传活动CSV并检查上传是否成功。

我认为看到实际代码有所帮助,我添加了很多评论,以帮助澄清每一位正在做的事情:

此函数在程序的末尾运行,并且它将上传的日期更新为.env文件到当前日期和时间。通过跟踪上传最后一次ran时,我确保只上传新活动。

我的Cron作业每天在上午9:01在上午9:01执行上述Python脚本,只要我的笔记本电脑亮起。设置Cron Job Up非常简单。仅在命令提示符中运行'crontab -e',然后将以下代码行添加到文件中:

'1 9 * * *'告诉Cron每天上午9:01运行这个程序。了解有关如何判断Cron何时运行程序的更多信息。 /users/kellyfoulk/documents/code/crawupload/cron.sh是Cron在上面列出的时间运行的文件(bash脚本)。 >> /users/kellyfoulk/documents/code/crawupload/cronlog.txt 2>& 1告诉cron发送任何程序输出(即错误,打印语句等)。我将输出发送到文件cronlog.txt,它存储在与我的应用程序相同的文件夹中。

让我们更多地谈谈Bash脚本Cron运行。它是一个激活虚拟环境的简单脚本,运行crawactivities.py(python脚本),然后取消激活虚拟环境。此脚本还告诉CRONTAB在哪里可以查找我的扫描程序下载。这是脚本的样子:

设置硒并确保它可以访问我的铬代程序下载有点挑剔,但一切都是一个有趣的项目,让我觉得自己觉得巫师并每晚拯救我大约五分钟。