selenium+python+crontab 自动提交学校健康信息收集

本文介绍了如何利用selenium、python和macos的crontab来自动提交学校的健康信息收集。由于验证码直接在网页源代码中,作者使用beautif soup提取,如果是图片验证码则推荐使用tesserocr库。此外,还详细说明了crontab的设置步骤以及在macos中遇到的问题和解决方法,包括如何处理launchctl和/etc/crontab。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 开头

懒是第一生产力 - -

因为需要输入什么的直接选了 selenium , 我的系统是 macos 所以定时用了 crontab 。 windows 可以把 .py 文件打包之后添加到 windows 的定时任务中, 也挺方便的。

  • python代码
from selenium import webdriver
from bs4 import BeautifulSoup as bs
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

id = '***'
name = '***'
card = '***'
browser = webdriver.Chrome()

browser.get('http://xgsys.swjtu.edu.cn/SPCP/Web/UserLogin.aspx') //打开
browser.implicitly_wait(10)

pageSource = browser.page_source
soup = bs(pageSource,'lxml')
codesoup = soup.select('.code-img')
code = codesoup[0].string    //提取验证码


browser.find_element_by_id('StudentId').clear()
browser.find_element_by_id('StudentId').send_keys(id)  //输入学号

browser.find_element_by_id('Name').clear()
browser.find_element_by_id('Name').send_keys(name)

browser.find_element_by_id('StuCard').clear()
browser.find_element_by_id('StuCard').send_keys(card)

browser.find_element_by_id('codeInput').clear()
browser.find_element_by_id('codeInput').send_keys(code)

browser.find_element_by_id('Button4').click()    //点击下一步

browser.implicitly_wait(10)

browser.find_element_by_id('Checkbox1').click()   //勾选我同意框框

browser.find_element_by_id('Save_Btn').click()   //点击提交

WebDriverWait(browser,10).until(EC.alert_is_present())
browser.switch_to.alert().accept()     //关闭弹窗
browser.quit()

学校网站做的太偷懒了, 验证码直接在网页源代码上, 我人都傻了。= =


这里直接用 beautifsoup 提取验证码就好。 如果是图片验证码的话可以导入 tesserocr 库,利用 tesserocr 库里的 image_to_text() 方法识别。

  • crontab设置

crontab设置定时时间可以用生成器, 链接如下 crontab生成器

然后在terminal输入 crontab -e 进入 vi 编辑器。

0 0 8 1/1 * ? /Users/xx/opt/anaconda3/python.app/Contents/MacOS/python /Users/xx/PycharmProjects/untitled/test1.py

前面是 crontab 设置我的是每天八点定时运行, 中间是 python 的绝对路径(记得改成自己的), 后面是我的 .py 文件的绝对路径。

写完后点 ESC , 然后英文 进入命令模式。w 是保存程序,q 是退出程序。输入保存退出后, terminal会显示 crontab: installing new crontab。这里就说明成功了,然后也可以自己用 crontab -l 查看自己的 crontab 任务。

显示这样就ok啦~

  • crontab在mac不执行问题

本以为这样就大功告成了, 还是太年轻了。 = =

查了下资料, 原来 OS X 的定时任务统统由 launchctl 来管理的。

先看一下 crontab 有没有问题 sudo launchctl list | grep cron

27944	0	com.vix.cron  //显示没有问题

然后看下 crontab 任务有没有在 launchctl 里 locate com.vix.cron

WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.

原来 database 不存在,那么按照上面的 WARNING 提示新建 sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

然后查看新建的 com.apple.locate.plist 文件,cat /System/Library/LaunchDaemons/com.vix.cron.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
	"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.vix.cron</string>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/sbin/cron</string>
	</array>
	<key>KeepAlive</key>
	<dict>
		<key>PathState</key>
		<dict>
			<key>/etc/crontab</key>
			<true/>
		</dict>
	</dict>
	<key>QueueDirectories</key>
	<array>
		<string>/usr/lib/cron/tabs</string>
	</array>
	<key>EnableTransactions</key>
	<true/>
</dict>
</plist>

可以看到 KeepAlive 需要 /etc/crontab ,看看这个文件是否存在 ls /etc/crontab

ls: /etc/crontab: No such file or directory   //没有就新建一个

于是 sudo touch etc/crontab ,最后就好啦~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值