引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧。

1. 无头浏览器

通常大家在在打开网页的工具就是浏览器,通过界面上输入网址就可以访问相应的站点内容,这个就是通常所说的基于界面的浏览器。除了这种浏览器之外,还有一种叫做无头浏览器的东西,主要是用作爬虫,用以捕捉Web上的各类数据;这里的无头主要是指没有界面,完全是后台操作,对于网站来说,它以为访问它的就是一个真实的浏览器。

 此类的框架包括: Phantomjs为代表,其它还有非常繁多的无头浏览器,大家可以自行了解一下。

2. Phantomjs

以javascript实现的一个无头浏览器,兼容大多数的浏览器标准,本质上是一个javascript的执行引擎和解析器。通过都是以它为底层服务,然后开发第三方其它语言的适配模块,从而打通访问phantomjs的通道, 比如Selenium, ghostdriver.

 其官方站点为: http://phantomjs.org,其支持多个平台的使用和部署。

3.  Selenium

其为Web的自动化测试框架,实现了WebDriver的接口,提供了不同平台操作各类浏览器的接口,比如目前主流的: IE, Firefox, Chrome, Opera, Android等各个平台的访问。

其起步阶段目标是满足自动化的需求,但其由于起特性,也可以用于页面的浏览访问,比如基于无头浏览器的数据抓取和捕获。

 Selenium提供了多种语言的接口和多个平台/浏览器的支持,常见的有Java, Python, Javascript, Ruby等。

 官方站点为:https://github.com/SeleniumHQ/selenium

4.  ghostdriver

根据其官方的描述:Ghost Driver is a pure JavaScript implementation of the WebDriver Wire Protocol for PhantomJS. It's a Remote WebDriver that uses PhantomJS as back-end.

 其就是一个简要的WebDriver的实现,基于Javascript语言来实现,方便基于PhantomJS作为后端来通信。

 官方地址: https://github.com/detro/ghostdriver

5.  WebDriver

WebDriver是由W3C协会制定的用以描述浏览器行为的一组标准接口,Selenium实现其中部分的接口,大部分的浏览器都是以该标准来作为衡量优劣和完善与否的标准。

 W3C的web driver定义: https://www.w3.org/TR/webdriver/

6.  代码示例

 让我们通过一段代码来看看如何基于Selenium和PhantomJS来实现自动化访问页面吧:

#from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
from selenium.webdriver.phantomjs.webdriver import WebDriver

# Create a new instance of the Firefox driver
driver = WebDriver(executable_path='/opt/phantomjs-2.1.1-linux-x86_64/bin/phantomjs', port=5001)

# go to the google home page
driver.get("http://www.baidu.com")

# the page is ajaxy so the title is originally this:
print(driver.title)

# find the element that's name attribute is q (the google search box)
inputElement = driver.find_element_by_id("kw")

# type in the search
inputElement.send_keys("cheese!")

# submit the form (although google automatically searches now without submitting)
inputElement.submit()

try:
# we have to wait for the page to refresh, the last thing that seems to be updated is the title
WebDriverWait(driver, 10).until(EC.title_contains("cheese!"))

# You should see "cheese! - Google Search"
print(driver.title)
print(driver.get_cookies())

finally:
driver.quit()
  这里基于PhantomJS作为无头浏览器的实现,WebDriver中的executable_path是放置PhantomJS的路径。这里在页面打开之后,输出了title,动态输入了cheese关键词,然后点击回车,最后打出了cookies信息。
7.   API相关信息

  Selenium Doc: https://seleniumhq.github.io/selenium/docs/api/py/index.html

Selenium API: https://seleniumhq.github.io/selenium/docs/api/py/api.html

Web Driver API: http://selenium-python.readthedocs.io/api.html

8. 总结

 这里有一个概念需要澄清一下, Selenium原始的初衷是做基于浏览器的自动化测试,所以其大部分的功能都是在基于浏览器的访问和接口操作,操作的都是有界面的浏览器;PhantomJS只是其中无界面的浏览器的一个实现而已了。对于不同的WebDriver接口的使用遵循上述的原则。

基于Python, Selenium, Phantomjs无头浏览器访问页面的更多相关文章

  1. 学习用java基于webMagic+selenium+phantomjs实现爬虫Demo爬取淘宝搜索页面

    由于业务需要,老大要我研究一下爬虫. 团队的技术栈以java为主,并且我的主语言是Java,研究时间不到一周.基于以上原因固放弃python,选择java为语言来进行开发.等之后有时间再尝试pytho ...

  2. 爬虫之图片懒加载技术、selenium工具与PhantomJS无头浏览器

    图片懒加载技术 selenium爬虫简单使用 2.1 selenium简介 2.2 selenium安装 2.3 selenium简单使用 2.3.1 selenium使用案例 2.3.2 selen ...

  3. Python+Selenium自动化-设置浏览器大小、刷新页面、前进和后退

    Python+Selenium自动化-设置浏览器大小.刷新页面.前进和后退   1.设置浏览器大小 maximize_window():设置浏览器大小为全屏 set_window_size(500,5 ...

  4. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  5. web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架

    基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  6. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

  7. selenium+谷歌无头浏览器爬取网易新闻国内板块

    网页分析 首先来看下要爬取的网站的页面 查看网页源代码:你会发现它是由js动态加载显示的 所以采用selenium+谷歌无头浏览器来爬取它 1 加载网站,并拖动到底,发现其还有个加载更多 2 模拟点击 ...

  8. 一次简单完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试,手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文就基于python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化 ...

  9. Selenium 启动无头浏览器,只有chrome 和 firefox的,没有IE

    使用无头浏览器,可以避免掉不确定的弹出框对脚本稳定性的影响,还能在脚本执行过程中省略掉了css 加载的时间. 以下是Selenium 启动无头浏览器的方法,只有chrome 和 firefox的. p ...

随机推荐

  1. 破解百度云盘MAC下载限速问题

    由于电脑更新问题,所以把电脑上的所有东西清除了.突然发现自己以前的东西还都在百度云盘上,但由于MAC 下载百度云盘上的东西只有几K或者几十K,这个网速对于小文件还能忍受,但如果是大文件就无法容忍了. ...

  2. Codeforces.567E.President and Roads(最短路 Dijkstra)

    题目链接 \(Description\) 给定一张有向图,求哪些边一定在最短路上.对于不一定在最短路上的边,输出最少需要将其边权改变多少,才能使其一定在最短路上(边权必须为正,若仍不行输出NO). \ ...

  3. 潭州课堂25班:Ph201805201 并发(进程,线程)二 第十二课 (课堂笔记

    线程与进程的其他相关操作 import threading # 线程 import multiprocessing # 进程 import socket import time def wo(): g ...

  4. Linux中ls -l(ll)返回结果中的文件访问权限-rw-r--rw-

    linux文件访问权限(像rw-r--rw-是什么意思)   Linux的文件访问权限分为 读.写.执行三种 r:可读(4) w:可写(2)对目录来说则可新建文件 x:可执行(1)对目录来说则可进入该 ...

  5. 【转载】IntelliJ IDEA 内存优化最佳实践

    本文转自 http://blog.oneapm.com/apm-tech/426.html [编者按]本文作者在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 I ...

  6. windows Server 2008 R2 添加新用户时密码不满足密码策略的要求

    ---------------------------本地用户和组---------------------------在计算机 WINSERVER2008R2 上创建用户 lintx 时,出现了以下 ...

  7. C# ConcurrentQueue实现

    我们从C# Queue 和Stack的实现知道Queue是用数组来实现的,数组的元素不断的通过Array.Copy从一个数组移动到另一个数组,ConcurrentQueue我们需要关心2点:1线程安全 ...

  8. MongoDB学习笔记(一)安装配置

    文档存储:文档存储一般用类似json的格式存储,存储的内容是文档型的. MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON ...

  9. mysql主备配置方法

    1. 选择两台机器(这里选的centos6.5 final),安装相同版本的mysql yum install mysql ; yum install mysql-server; 2. 启动mysql ...

  10. 基于Python的datetime模块和time模块源码阅读分析

    目录 1 前言  2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...