ubuntu下selenium调用chromedriver模拟chrome浏览器操控网页

目的:在阿里云上挂一个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" #手动指定使用的览器位置
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值