- 开头
懒是第一生产力 - -
因为需要输入什么的直接选了 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 任务。
- 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
,最后就好啦~