• python使用selenium chrome + headless记录


    本文基于linux centos系统下操作;

    一、使用yum安装chrome

    1.配置yum源

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

    执行命令:

    cd /ect/yum.repos.d/
    vim google-chrome.repo

    编辑文件写入下面内容

    [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

    2.执行命令安装

    yum -y install google-chrome-stable

    如果上面的出错就执行下面这条,上面的Google官方源可能在中国无法使用

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

    执行google-chrome-stable --version 查看版本号;输出就安装成功了

    二、安装selenium

    执行命令

    pip install selenium

    可以用pip list列出信息看看安装成功没有

    三、安装驱动chromedriver

    下载地址:http://chromedriver.storage.googleapis.com/index.html

    注意你的驱动版本要适配chrome的版本

    1.先查看chrome版本

    控制台执行命令

    google-chrome-stable --version

    输出:Google Chrome 79.0.3945.88

    说明我的版本是79的,下载的驱动也要适配,去下载地址找79的,然后打开下面的notes.txt文件

     

     

    可以看到驱动支持的chrome版本是79,没问题了;

    执行以下命令:

    wget -N http://chromedriver.storage.googleapis.com/79.0.3945.36/chromedriver_linux64.zip   #注意你的版本
    
    unzip chromedriver_linux64.zip
    
    chmod +x chromedriver
    
    mv -f chromedriver /usr/local/share/chromedriver
    
    ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
    
    ln -s /usr/local/share/chromedriver /usr/bin/chromedriver

    四、测试

    #!/usr/bin/python
    # -*- coding=utf-8 -*-
    
    from selenium import webdriver
    
    
    chromeOptions = webdriver.ChromeOptions()
    #chromeOptions.add_argument('--proxy-server=http://ip:port')  #设置无账号密码的代理
    
    #chromeOptions.add_argument('--disable-infobars')  # 禁止策略化
    chromeOptions.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错
    #chromeOptions.add_argument('window-size=1920x3000')  # 指定浏览器分辨率
    #chromeOptions.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bug
    #chromeOptions.add_argument('--incognito')  # 隐身模式(无痕模式)
    #chromeOptions.add_argument('--disable-javascript')  # 禁用javascript
    #chromeOptions.add_argument('--start-maximized')  # 最大化运行(全屏窗口),不设置,取元素会报错
    #chromeOptions.add_argument('--disable-infobars')  # 禁用浏览器正在被自动化程序控制的提示
    #chromeOptions.add_argument('--hide-scrollbars')  # 隐藏滚动条, 应对一些特殊页面
    #chromeOptions.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
    chromeOptions.add_argument('--headless')  # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
    driver = webdriver.Chrome(chrome_options=chromeOptions)
    driver.get('http://www.baidu.com')
    test = driver.find_element_by_id('u1')
    testa = test.find_elements_by_tag_name('a')[1].text
    print(testa)
    driver.quit()
    exit(0)

    最后输出  hao123 说明成功了;

    第一次弄我遇到的报错信息

    selenium.common.exceptions.WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 127

    原因是chrome版本和chromedriver版本不对;

    五、获取js动态渲染的html  多用了个WebDriverWait显示等待:详情介绍可看https://blog.csdn.net/sinat_41774836/article/details/88965281

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    try:
    
        chromeOptions = webdriver.ChromeOptions()
        chromeOptions.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错
        chromeOptions.add_argument('--headless')  # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
        driver = webdriver.Chrome(chrome_options=chromeOptions)
        driver.get(URL)
        print('开始等待js动态渲染加载出节点,设置15秒超时')
        WebDriverWait(driver, 15).until(
            #presence_of_element_located    判断某个元素是否被加到了 dom 树里,并不代表该元素一定可见
            EC.presence_of_element_located((By.CLASS_NAME, "listBox")) 
        )
        print('结束等待,继续执行')
        #rhtml = driver.find_element_by_xpath("//*").get_attribute("outerHTML")
        rhtml = driver.page_source
        driver.quit()
    except:
    #15秒内listBox元素还没渲染出来,抛出异常;
    print('except')
  • 相关阅读:
    从零开始学Bootstrap
    CSS VS JS动画,哪个更快
    css定位(positon)
    json
    使用 CSS3 绘制 Hello Kitty
    后台找到repeater里面的div并添加客户端点击事件
    dropDownList之"请选择",同时设置默认选项
    asp.net 后台对话框,确认跳转
    后台生成textbox并设置多行属性,自动换行
    asp.net多图片上传同时保存对每张图片的描述
  • 原文地址:https://www.cnblogs.com/JahanGu/p/12145235.html
Copyright © 2020-2023  润新知