zoukankan      html  css  js  c++  java
  • Centeos7搭建selenium+Chrome浏览器

    博主主要是用来更新爬虫Cookie

    环境安装

    python3 安装selenium  

    pip3 install selenium

    安装chrome浏览器+chromedriver驱动

    一.配置yum源

    1.在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo 

            

    vi /etc/yum.repos.d/google-chrome.repo
    

    2.写入如下代码:

    [google-chrome] 
    name=google-chrome 
    baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch 
    enabled=1 
    gpgcheck=1 
    gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

      使用vi在命令行编辑:(详细参考https://blog.csdn.net/u013142781/article/details/50735470)

      按下a键使用insert功能来添加修改文件

      修改完成后按下ESC键进入末行模式   然后输入 :q保存  :wq保存退出

    二.安装google chrome浏览器

    yum update     #更新yum源
    yum -y install google-chrome-stable    #安装

    Google官方源可能在中国无法使用,导致安装失败或者在国内无法更新,可以添加以下参数来安装:

    yum -y install google-chrome-stable --nogpgcheck

    三.添加软连接

    注意:源文件删除后软连接无法使用  ls查看

    which google-chrome-stable   #寻找chrome路径
    ln -s 路径 /bin/chrome         #查询到的路径 添加软连接

    四.下载chromedriver驱动

    https://chromedriver.storage.googleapis.com/index.html?

    下载对应版本的驱动(两个都下载最新的应该没问题),对应表参考:(版本不兼容会出现下面类似的报错)



    ChromeDriver v2.43 (2018-10-16)----------Supports Chrome v69-71
    ChromeDriver v2.42 (2018-09-13)----------Supports Chrome v68-70
    ChromeDriver v2.41 (2018-07-27)----------Supports Chrome v67-69
    ChromeDriver v2.40 (2018-06-07)----------Supports Chrome v66-68
    ChromeDriver v2.39 (2018-05-30)----------Supports Chrome v66-68
    ChromeDriver v2.38 (2018-04-17)----------Supports Chrome v65-67
    ChromeDriver v2.37 (2018-03-16)----------Supports Chrome v64-66
    ChromeDriver v2.36 (2018-03-02)----------Supports Chrome v63-65
    ChromeDriver v2.35 (2018-01-10)----------Supports Chrome v62-64
    Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'
     
      (Session info: chrome=65.0.3325.31)
      (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 6.1.7601 SP1 x86) 
    (WARNING: The server did not provide any stacktrace information)
    Command duration or timeout: 0 milliseconds

    使用xftp复制下载好的文件到服务器执行如下代码:

    chmod +x chromedriver #增加可执行权限
    
    #移动文件到该路径
    sudo mv -f chromedriver /usr/local/share/chromedriver 
    #添加软连接(链接存在会报错,直接跳过即可)
    sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver 
    sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver

    注意:

      对于root用户不能运行chrome

      编辑启动文件: vim /opt/google/chrome/google-chrome 将最后一行改写为: exec -a "$0" "$HERE/chrome" "$@" --no-sandbox $HOME

    因为我这里用的是无界面显示,所以就不装Xvfb,pyvirtualdisplay了

    到这里环境安装完毕

    下面附上获取网站cookie的代码(模拟登陆什么的自己研究吧,我这里就给个获取cookie的示例)

    #centeos 携程cookie更新
    
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.chrome.options import Options
    import pymysql
    
    
    
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')#无界面
    driver = webdriver.Chrome(executable_path="chromedriver",chrome_options=options)
    url = "https://www.ly.com/iflight/flight-book1.aspx?para=0*SHA*MLE*2019-10-10**YSCF*1*0*1&advanced=false&orgAirCode=false&desAirCode=false"
    wait = WebDriverWait(driver,10)#10s等待响应
    try:   #发生错误结束浏览器,防止占用资源,导致服务器崩溃(也可以在程序开头添加os模块检测chrome进程,每次运行先杀死)
        driver.get(url)
    
        message = driver.get_cookies() #获取当前页面的cookie
        l = ""
        for i in message:
            name = i["name"] + '=' + i["value"] + ';'
            l = l + name
        print(l)
        driver.quit()
    except:
        driver.quit()

    添加linux定时任务定时更新cookie:

     

    crontab -e  #编辑定时任务
    crontab -l   #查看定时任务
    #下面给出几个例子
    #每天凌晨30分更新
    30 0 * * * python3 /root/global_spider2/global_cn/all_global.py 
    #每3个小时更新
    * */3 * * * python3 /root//国内外机票cookie更新/domestic_cookie.py
    #每2个小时更新一次 
    * */2 * * * python3 /root/国内外机票cookie更新/china_ctrip.py

    更多有关于定时任务的操作  https://www.cnblogs.com/zoulongbin/p/6187238.html

     

  • 相关阅读:
    jackson 枚举 enum json 解析类型 返回数字 或者自定义文字 How To Serialize Enums as JSON Objects with Jackson
    Antd Pro V5 中ProTable 自定义查询参数和返回值
    ES6/Antd 代码阅读记录
    es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
    Antd Hooks
    使用.Net Core开发WPF App系列教程(其它 、保存控件内容为图片)
    使用.Net Core开发WPF App系列教程( 三、与.Net Framework的区别)
    使用.Net Core开发WPF App系列教程( 四、WPF中的XAML)
    使用.Net Core开发WPF App系列教程( 二、在Visual Studio 2019中创建.Net Core WPF工程)
    使用.Net Core开发WPF App系列教程( 一、.Net Core和WPF介绍)
  • 原文地址:https://www.cnblogs.com/lyxdw/p/9882083.html
Copyright © 2011-2022 走看看