前言
python借助selenium我们可以很容易实现日常签到,打卡,抢票等功能,解放双手,如果用Windows的话有时电脑没开,可能导致定时任务没能正常运行,所以直接把服务放到Linux上
安装Python3
默认CentOS自带了python2,其实也能用,不过按个人习惯安装了python3。
# 安装必要的依赖
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel -y
# 下载python3
mkdir /home/software
cd /home/software
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar -zxvf Python-3.7.0.tgz
cd Python-3.7.0/
# 编译安装
./configure
make&&make install
由于系统存在默认的python,这里需要修改一下python的引用,让他指向python3
# 建立python软连接
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/bin/python3 /usr/bin/python
# 建立pip软连接,pip原本可能不存在,问题不大
mv /usr/bin/pip /usr/bin/pip.bak
ln -s /usr/local/bin/pip3 /usr/bin/pip
# 测试下是否安装正常
python --version
pip --version
因为yum用的python2,作者也不准备更新python3的版本,所以这里需要调整下面两个文件
vi /usr/libexec/urlgrabber-ext-down
vi /usr/bin/yum
# 把第一行的/usr/bin/python修改成/usr/bin/python2.7
安装selenium及chrome浏览器
安装selenium
pip install selenium
安装chrome
vi /etc/yum.repos.d/google-chrome.repo
# 进入按i,然后把下面的粘贴进去,再按Esc,输入:wq保存退出
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl.google.com/linux/linux_signing_key.pub
# 之后就可以安装chrome了,顺便安装相关依赖
yum -y install google-chrome-stable
yum -y install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts
安装chromedriver(selenium需要调用)
cd /home/software/
# 注意,下面的driver版本需要根据你安装的chrome版本进行调整
wget http://npm.taobao.org/mirrors/chromedriver/87.0.4280.88/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
# 如果没有unzip就安装unzip
yum -y install unzip
# 把driver移动到命令目录
mv chromedriver /usr/bin/
chmod +x /usr/bin/chromedriver
#测试下
chromedriver -version
使用crontab定时运行python脚本
# 查看当前有哪些定时任务
crontab -l
# 如果crontab没有安装,使用下面命令安装
yum install vixie-cron
yum install crontabs
# 添加任务,编辑定时任务清单
crontab -e
# 添加下面任务,每天9点运行SignUp.py脚本
0 9 * * * python /home/pyscripts/SignUp.py > /home/logs/signUp.log 2>&1 &
Signup.py脚本可以参考下面的内容,具体编写不做详述
#!/usr/bin/env python
# coding:utf-8
# Author: Christophero
# 方便延时加载
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 模拟浏览器打开网站
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver import ActionChains
chrome_options = Options()
# 因为linux服务器没有图形界面,这里添加选项使用无头模式 --headless --no-sandbox --disable-dev-shm-usage
# 初始最大化,不然部分网站不能正常找到元素 --window-size=1920,1080 --start-maximized
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(options=chrome_options)
driver.implicitly_wait(10)
# 将窗口最小化
# driver.minimize_window()
# 将窗口最大化
# driver.maximize_window()
# #################### 心阶云签到 ##########################
try:
driver.get('https://www.xinjiecloud.co')
# 根据路径XPATH找到按钮,并模拟进行点击
driver.find_element_by_xpath('//*[@id="header"]/nav/ul/li[2]/a').click()
# 格式是PEP8自动转的
# 这里是找到输入框,发送要输入的用户名和密码,模拟登陆
driver.find_element_by_xpath("//*[@id=\"email\"]").send_keys("这里输入账号")
driver.find_element_by_xpath("//*[@id=\"passwd\"]").send_keys("这里输入密码")
# 在输入用户名和密码之后,点击登陆按钮
driver.find_element_by_xpath("//*[@id=\"login\"]").click()
# 点击签到,实现功能
driver.find_element_by_xpath("//*[@id=\"checkin\"]").click()
except Exception as e:
print('except:', e)
# 这个print其实没事什么用,如果真的要测试脚本是否运行成功,可以用try来抛出异常
print("心阶云签到成功")
time.sleep(2)
# 脚本运行成功,退出浏览器
driver.quit()