• Python爬虫——PhantomJS的使用和handless


    Python爬虫——PhantomJS和handless的使用

    1、PhantomJS的使用

    PhantomJS 简介

    PhantomJS 是一个基于Webkit的“无界面”(headless)浏览器,它会把网站加载到内存并使用webkit来编译解释执行页面上的JavaScript代码,由于不进行css和gui渲染、不展示图形界面,所以运行起来比完整的浏览器要高效。

    如果把 Selenium 和 PhantomJS 结合在一起使用,就能实现一个能力非常强大的网络爬虫了,这个爬虫可以处理JavaScript、Cookie、headers,以及任何我们真实用户需要做的事情。

    PhantomJS 下载

    下载方式:PhantomJS 只能从它的官方网站下载,因为 PhantomJS 是一个功能完善的无界面浏览器而并非一个 Python 库,所以 PhantomJS 不像 Python 的其他库一样使用 pip 命令安装。

    使用方式:下载 PhantomJS 压缩包后解压得到 phantomjs.exe,把 phantomjs.exe 放到 python 当前项目目录下,通过Selenium调用PhantomJS来直接使用。

    官方网站下载地址

    PhantomJS 官方参考文档

    PhantomJS 的使用

    代码实例:

    import time
    from selenium import webdriver
    
    path = 'phantomjs.exe'
    # 通过Selenium的webdriver调用PhantomJS
    driver = webdriver.PhantomJS(path)
    driver.get("http://www.baidu.com/")
    
    # 获取页面名为 wrapper的id标签的文本内容
    data = driver.find_element_by_id("wrapper").text
    
    # 打印数据内容
    print(data)
    
    # 打印页面标题 "百度一下,你就知道
    print(driver.title)
    
    # 生成当前页面快照并保存
    driver.save_screenshot("baidu.png")
    
    time.sleep(2)
    
    # 定位百度搜索输入框,输入字符串"王维家"
    driver.find_element_by_id("kw").send_keys("王维家")
    
    # 清除输入框的内容
    driver.find_element_by_id("kw").clear()
    
    # 定位百度搜索输入框,输入字符串"毛不易"
    driver.find_element_by_id("kw").send_keys("毛不易")
    
    # 定位百度搜索按钮并点击
    driver.find_element_by_id("su").click()
    
    # 获取新的页面快照并保存
    driver.save_screenshot("maobuyi.png")
    
    # 输出网页渲染后的源代码
    # print(driver.page_source)
    
    
    # 清除输入框的内容
    driver.find_element_by_id("kw").clear()
    # 输入框重新输入内容 “福禄寿”
    driver.find_element_by_id("kw").send_keys("福禄寿")
    
    # 提交搜索
    driver.find_element_by_id("kw").submit()
    
    time.sleep(2)
    # 生成新的页面快照
    driver.save_screenshot("福禄寿.png")
    
    # 获取当前url
    print(driver.current_url)
    
    # 关闭当前页面,如果只有一个页面,会关闭浏览器
    driver.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    执行结果:

    新闻hao123地图贴吧视频图片网盘更多
    设置登录
    
    换一换
    中国迈入创新型国家行列
    3全年粮食夺取丰收有支撑
    1鼓励生三孩 17部门联合发文
    热
    431省份昨日新增本土“566+2322”
    2要求4省完成财政上缴任务有何深意?
    热
    5孩子高铁上吵闹 乘客提醒被家长怼
    关于百度About Baidu使用百度前必读帮助中心
    百度一下,你就知道
    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E7%A6%8F%E7%A6%84%E5%AF%BF&fenlei=256&rsv_pq=b11a858d007a15c5&rsv_t=498aJh0m9WbICve1EXCXZCzDY41aZM9AIwgaD3J2LU5gCAb3ULnF%2BVi1DgJU&rqlang=en&rsv_enter=0&rsv_dl=tb&rsv_btype=t&inputT=28&rsv_sug3=9&rsv_sug4=29&rsv_jmp=fail
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2、Chrome handless

    Chrome handless 模式:由于新版本的 selenium 已经弃用 PhantomJs,PhantomJs也停止了更新和维护,所以推荐使用谷歌的Chrome handless模式(无头模式),这是一款无界面的谷歌浏览器,可以让使用者在不打开UI界面的情况下使用Chrome浏览器,并且运行效果与真实的Chrome浏览器一样,但是性能更高。

    使用要求:

    • Windows系统chrome版本>=60
    • Linux系统chrome版本>=59
    • python版本>=3.6
    • selenium>=3.4
    • chromeDriver>=2.31

    handless 使用实例

    代码实例:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import time
    
    # 配置 handless 方法
    def create_handless():
        # 创建一个参数对象,用来控制chrome以无界面模式打开
        chrome_options = Options()
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--disable-gpu')
        # chrome浏览器文件路径
        path = r'.C:\Program Files\Google\Chrome\Application\chromedriver.exe'
        chrome_options.binary_location = path
        # 创建浏览器对象
        browser = webdriver.Chrome(chrome_options=chrome_options)
        return browser
    
    # 访问百度
    url = 'http://www.baidu.com/'
    browser = create_handless()
    browser.get(url)
    time.sleep(2)
    browser.save_screenshot('baidu.png')  # 截取图片
    browser.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    ES6中let、const、和var之间的用法以及区别
    史上最全安装Maven教程
    第二树参与COP27可持续消费主题边会,探讨低碳办公解决方案
    扁平化嵌套列表迭代器 [树的递归前序遍历 + 迭代前序遍历]
    react hook:useMemo
    前端面试八股(持续更新)
    [LeetCode周赛复盘] 第 318 场周赛20221107
    相对强弱指标 RSI
    T1175计算两个日期之间的天数
    C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例
  • 原文地址:https://blog.csdn.net/wpc2018/article/details/126381424