前言
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# 下载python3mkdir /home/softwarecd /home/softwarewget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgztar -zxvf Python-3.7.0.tgzcd Python-3.7.0/# 编译安装./configuremake&&make install
由于系统存在默认的python,这里需要修改一下python的引用,让他指向python3
# 建立python软连接mv /usr/bin/python /usr/bin/python.bakln -s /usr/local/bin/python3 /usr/bin/python# 建立pip软连接,pip原本可能不存在,问题不大mv /usr/bin/pip /usr/bin/pip.bakln -s /usr/local/bin/pip3 /usr/bin/pip# 测试下是否安装正常python --versionpip --version

因为yum用的python2,作者也不准备更新python3的版本,所以这里需要调整下面两个文件
vi /usr/libexec/urlgrabber-ext-downvi /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-chromebaseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64enabled=1gpgcheck=1gpgkey=https://dl.google.com/linux/linux_signing_key.pub# 之后就可以安装chrome了,顺便安装相关依赖yum -y install google-chrome-stableyum -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.zipunzip chromedriver_linux64.zip# 如果没有unzip就安装unzipyum -y install unzip# 把driver移动到命令目录mv chromedriver /usr/bin/chmod +x /usr/bin/chromedriver#测试下chromedriver -version

使用crontab定时运行python脚本
# 查看当前有哪些定时任务crontab -l# 如果crontab没有安装,使用下面命令安装yum install vixie-cronyum 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 timefrom selenium import webdriverfrom selenium.webdriver.chrome.options import Options# 模拟浏览器打开网站from selenium.common.exceptions import NoSuchElementExceptionfrom selenium.webdriver import ActionChainschrome_options = Options()# 因为linux服务器没有图形界面,这里添加选项使用无头模式 --headless --no-sandbox --disable-dev-shm-usage# 初始最大化,不然部分网站不能正常找到元素 --window-size=1920,1080 --start-maximizedchrome_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()
