Python爬虫之PhantomJS和handless的使用详解

 更新时间:2023年09月14日 10:02:36   作者:万里顾—程  
这篇文章主要介绍了Python爬虫之PhantomJS和handless的使用详解,PhantomJS是一个基于Webkit的headless浏览器,它会把网站加载到内存并使用webkit来编译解释执行页面上的JavaScript代码,由于不进行css和gui渲染、不展示图形界面,需要的朋友可以参考下

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()

执行结果:

新闻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

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()

到此这篇关于Python爬虫之PhantomJS和handless的使用详解的文章就介绍到这了,更多相关Python的PhantomJS和handless内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中的bisect模块与二分查找详情

    python中的bisect模块与二分查找详情

    这篇文章主要介绍了python中的bisect模块与二分查找详情,bisect是python的内置模块, 用于有序序列的插入和查找。 插入的数据不会影响列表的排序,更多详细内容需要的朋友可以参考一下
    2022-09-09
  • Python的净值数据接口调用示例分享

    Python的净值数据接口调用示例分享

    这篇文章主要介绍了Python的净值数据接口调用示例分享的相关资料,需要的朋友可以参考下
    2016-03-03
  • python编写猜数字小游戏

    python编写猜数字小游戏

    这篇文章主要为大家详细介绍了python编写猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Python中的程序流程控制语句

    Python中的程序流程控制语句

    这篇文章主要介绍了Python中的程序流程控制语句,本篇博客将会讲述一下Python语言中的流程控制语句,在高中我们数学中学过程序流程题,下面我们来看看python中得流程语句会是怎么样呢,需要的小伙伴可以参考一下
    2022-02-02
  • Python堆栈的具体使用

    Python堆栈的具体使用

    本文主要介绍了Python堆栈的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 完美处理python与anaconda环境变量的冲突问题

    完美处理python与anaconda环境变量的冲突问题

    这篇文章主要介绍了完美处理Python与anaconda环境变量的冲突问题,对anaconda感兴趣的同学,可以参考下
    2021-04-04
  • OpenCV角点检测的实现示例

    OpenCV角点检测的实现示例

    角点通常被定义为两条边的交点,本文主要介绍了OpenCV角点检测的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • django中使用POST方法获取POST数据

    django中使用POST方法获取POST数据

    这篇文章主要介绍了django中使用POST方法获取POST数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python函数的重新定义及练习

    python函数的重新定义及练习

    这篇文章主要为大家详细介绍了python的函数,使用python,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python中dumps与dump及loads与load的区别

    Python中dumps与dump及loads与load的区别

    这篇文章主要介绍了Python中dumps与dump、loads与load的区别,json模块提供了一种很简单的方式来编码和解码JSON数据。其中两个主要的函数是json.dumps()和json.loads(),需要的朋友可以参考下
    2022-04-04

最新评论