目的:在阿里云上挂一个python脚本,实现在指定网站上每天自动打卡,下面详述实现过程。
一、安装Chrome浏览器
1、安装依赖
sudo apt-get install libxss1 libappindicator1 libindicator7
2、下载Chrome安装包
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
3、安装
sudo apt-get install -f
sudo dpkg -i google-chrome*.deb
4、查看chrome浏览器版本(安装chromedriver时要对应)
google-chrome --version
二、安装ChromeDriver
1、安装xvfb
以便我们可以无头奔跑地运行Chrome
sudo apt-get install xvfb
2、安装unzip
sudo apt-get install unzip
3、在浏览器中下载chromedriver安装包
chrome版本与chromedriver版本对照表:
https://blog.csdn.net/yoyocat915/article/details/80580066
chromedriver下载路径:
http://npm.taobao.org/mirrors/chromedriver/
4、解压缩
unzip chromedriver_linux64.zip
ps:解压后我的路径为:/home/admin/chromedriver
5、建立软连接(相当于windows下添加到环境变量,以便系统能找到chromedriver的安装路径)
sudo ln -s /home/admin/chromedriver /usr/local/bin/chromedriver
sudo ln -s /home/admin/chromedriver /usr/bin/chromedriver
ps:将 /home/admin/chromedriver 改为对应的解压路径
三、模拟运行Chrome浏览器,以翻译狗网站为例,实现自动签到功能
1、安装Python依赖
pip3 install selenium
2、查看cookie
为了避免每次登陆网站都要输入账号密码,需要保存登陆的cookie以便绕过账号密码直接登陆,查看cookie方式如下,记录下token的value即可,其他参数可有可无,将下文python代码中的token值ssssssssssssssssssss改为你对应的token值即可:
3、以翻译狗网站为例,实现自动签到功能
实现selenium调用chromedriver模拟chrome浏览器登陆翻译狗网站,并进行自动签到的python代码如下,需要改动token值
import time
import datetime
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 判断元素是否存在
def ifElementExist(browser,xpath):
flag = True
try:
browser.find_element_by_xpath(xpath)
return flag
except:
flag = False
return flag
#模拟登陆并签到
def loginAndSign(token_value):
chrome_options = Options()
chrome_options.add_argument('--no-sandbox') #“–no-sandbox”参数是让Chrome在root权限下跑
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless') #“–headless”参数是不用打开图形界面
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('http://www.fanyigou.net/')
browser.add_cookie({'name':'token','value':token_value})
browser.get('http://www.fanyigou.net/')
xpath = '//div[@class="signpage-content"]/button[@class="signbtn"]'
if ifElementExist(browser,xpath):
print('还未签到')
browser.find_element_by_xpath(xpath).click()
print('签到完成')
time.sleep(20)
browser.quit()
def main(h=5,m=20): #设定自动签到时间
while True:
now = datetime.datetime.now()
token = 'sssssssssssssssssssssssssssssss'#将s....s改为你对应的cookie
if now.hour == h and now.minute == m:
loginAndSign(token)
print(now,'签到完成')
time.sleep(60)
main()
4、通过putty连接阿里云,让程序在后台运行
通过putty连接阿里云后,一旦会话中断,运行的程序也会中断,所以需要通过screen新开一个子窗口运行。
4.1在terminal下输入screen新建一个子会话
4.2运行程序,ctrl+a ,然后按下d 离开子会话。
ps:有关screen的使用:
在每个screen session里使用Ctrl-a 来输入一个命令。
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> Time,显示当前时间,和系统的 load
C-a k -> kill window,强行关闭当前的 window
ps:ubuntu下 解决selenium报错--unknown error: DevToolsActivePort file doesn't exist
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
chrome_options.add_argument('--no-sandbox') #让Chrome在root权限下跑
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless') #不用打开图形界面
chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
# chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" #手动指定使用的览器位置