前言

python借助selenium我们可以很容易实现日常签到,打卡,抢票等功能,解放双手,如果用Windows的话有时电脑没开,可能导致定时任务没能正常运行,所以直接把服务放到Linux上

安装Python3

默认CentOS自带了python2,其实也能用,不过按个人习惯安装了python3。

  1. # 安装必要的依赖
  2. yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel -y
  3. # 下载python3
  4. mkdir /home/software
  5. cd /home/software
  6. wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
  7. tar -zxvf Python-3.7.0.tgz
  8. cd Python-3.7.0/
  9. # 编译安装
  10. ./configure
  11. make&&make install

由于系统存在默认的python,这里需要修改一下python的引用,让他指向python3

  1. # 建立python软连接
  2. mv /usr/bin/python /usr/bin/python.bak
  3. ln -s /usr/local/bin/python3 /usr/bin/python
  4. # 建立pip软连接,pip原本可能不存在,问题不大
  5. mv /usr/bin/pip /usr/bin/pip.bak
  6. ln -s /usr/local/bin/pip3 /usr/bin/pip
  7. # 测试下是否安装正常
  8. python --version
  9. pip --version

image.png
因为yum用的python2,作者也不准备更新python3的版本,所以这里需要调整下面两个文件

  1. vi /usr/libexec/urlgrabber-ext-down
  2. vi /usr/bin/yum
  3. # 把第一行的/usr/bin/python修改成/usr/bin/python2.7

image.png

安装selenium及chrome浏览器

安装selenium

  1. pip install selenium

安装chrome

  1. vi /etc/yum.repos.d/google-chrome.repo
  2. # 进入按i,然后把下面的粘贴进去,再按Esc,输入:wq保存退出
  3. [google-chrome]
  4. name=google-chrome
  5. baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
  6. enabled=1
  7. gpgcheck=1
  8. gpgkey=https://dl.google.com/linux/linux_signing_key.pub
  9. # 之后就可以安装chrome了,顺便安装相关依赖
  10. yum -y install google-chrome-stable
  11. yum -y install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts

安装chromedriver(selenium需要调用)

  1. cd /home/software/
  2. # 注意,下面的driver版本需要根据你安装的chrome版本进行调整
  3. wget http://npm.taobao.org/mirrors/chromedriver/87.0.4280.88/chromedriver_linux64.zip
  4. unzip chromedriver_linux64.zip
  5. # 如果没有unzip就安装unzip
  6. yum -y install unzip
  7. # 把driver移动到命令目录
  8. mv chromedriver /usr/bin/
  9. chmod +x /usr/bin/chromedriver
  10. #测试下
  11. chromedriver -version

image.png

使用crontab定时运行python脚本

  1. # 查看当前有哪些定时任务
  2. crontab -l
  3. # 如果crontab没有安装,使用下面命令安装
  4. yum install vixie-cron
  5. yum install crontabs
  6. # 添加任务,编辑定时任务清单
  7. crontab -e
  8. # 添加下面任务,每天9点运行SignUp.py脚本
  9. 0 9 * * * python /home/pyscripts/SignUp.py > /home/logs/signUp.log 2>&1 &

Signup.py脚本可以参考下面的内容,具体编写不做详述

  1. #!/usr/bin/env python
  2. # coding:utf-8
  3. # Author: Christophero
  4. # 方便延时加载
  5. import time
  6. from selenium import webdriver
  7. from selenium.webdriver.chrome.options import Options
  8. # 模拟浏览器打开网站
  9. from selenium.common.exceptions import NoSuchElementException
  10. from selenium.webdriver import ActionChains
  11. chrome_options = Options()
  12. # 因为linux服务器没有图形界面,这里添加选项使用无头模式 --headless --no-sandbox --disable-dev-shm-usage
  13. # 初始最大化,不然部分网站不能正常找到元素 --window-size=1920,1080 --start-maximized
  14. chrome_options.add_argument("--window-size=1920,1080")
  15. chrome_options.add_argument("--start-maximized")
  16. chrome_options.add_argument('--headless')
  17. chrome_options.add_argument('--no-sandbox')
  18. chrome_options.add_argument('--disable-dev-shm-usage')
  19. driver = webdriver.Chrome(options=chrome_options)
  20. driver.implicitly_wait(10)
  21. # 将窗口最小化
  22. # driver.minimize_window()
  23. # 将窗口最大化
  24. # driver.maximize_window()
  25. # #################### 心阶云签到 ##########################
  26. try:
  27. driver.get('https://www.xinjiecloud.co')
  28. # 根据路径XPATH找到按钮,并模拟进行点击
  29. driver.find_element_by_xpath('//*[@id="header"]/nav/ul/li[2]/a').click()
  30. # 格式是PEP8自动转的
  31. # 这里是找到输入框,发送要输入的用户名和密码,模拟登陆
  32. driver.find_element_by_xpath("//*[@id=\"email\"]").send_keys("这里输入账号")
  33. driver.find_element_by_xpath("//*[@id=\"passwd\"]").send_keys("这里输入密码")
  34. # 在输入用户名和密码之后,点击登陆按钮
  35. driver.find_element_by_xpath("//*[@id=\"login\"]").click()
  36. # 点击签到,实现功能
  37. driver.find_element_by_xpath("//*[@id=\"checkin\"]").click()
  38. except Exception as e:
  39. print('except:', e)
  40. # 这个print其实没事什么用,如果真的要测试脚本是否运行成功,可以用try来抛出异常
  41. print("心阶云签到成功")
  42. time.sleep(2)
  43. # 脚本运行成功,退出浏览器
  44. driver.quit()