美文网首页我爱编程
爬虫(五)(headless-browers)动态内容

爬虫(五)(headless-browers)动态内容

作者: 马梦里 | 来源:发表于2018-01-13 17:03 被阅读0次

    方法二、headless browser

    鼠标滚动点击这些事件是通过浏览器产生的,通过 request 库无法模拟这些事件,那么就需要去分析 network 里面的 XHR,很困难,比较烂的网站需要分析很久。那么就有人将浏览器包装成 API,暴露给各个语言,让不同语言调用,就是伪装成爬虫浏览器。但是在使用这些 API 的时候需要打开这些浏览器,这些浏览器有图形界面,不能使用在服务器上。因为桌面版浏览器无法安装在服务器上,服务器上没有 GUI。

    后来火狐谷歌自己生产了相应的 API,可以通过 API 控制浏览器(模仿鼠标、键盘等事件),加入参数后,就不需要打开浏览器了,这就是无头模式,无头模式可以部署在服务器上。(用 splinter,selenium是不同爬虫引擎的集合)

    http://blog.csdn.net/qq_29245097/article/details/52204529
    http://blog.csdn.net/blueheart20/article/details/70768930

    无头浏览器

    通常打开网页的工具就是浏览器,通过界面上输入网址就可以访问站点内容,这个就是基于界面的浏览器。

    除了这种浏览器之外,还有无头浏览器 - headless browser,没有界面,但浏览器该有的东西它都有。主要是用作爬虫,捕捉Web上的各类数据。完全是后台操作。对于网站来说,以为访问它的就是一个真实的浏览器。

    现在许多网站有反爬虫功能。我们要做的就是尽量把我们的请求伪装成是真正的浏览器发出的一样。最好就直接用浏览器来发送请求,比如使用WebDriver驱动浏览器模拟真人操作。但是这样速度太慢,再说服务器的linux一般都是server版的,根本没有桌面,因此也没有浏览器可用。所以我们使用无头(headless)浏览器。功能跟真的浏览器一样,速度更快,只不过没有界面罢了。

    无头浏览器种类

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

    2. Selenium
      其为Web的自动化测试框架,实现了WebDriver的接口,提供了不同平台操作各类浏览器的接口,比如目前主流的: IE, Firefox, Chrome, Opera, Android等各个平台的访问。
      Selenium提供了多种语言的接口和多个平台/浏览器的支持,常见的有Java, Python, Javascript, Ruby等。

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

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


    Selenium是什么?

    “Selenium”是一个项目的名字,它包括了一组工具和API:Selenium IDE,Selenium RC,Selenium WebDriver,和Selenium Grid。Selenium项目主页:seleniumhq.org

    • Selenium IDE 是一个Firefox的插件,这个插件可以方便用户录制和回放浏览器上的操作。

    • Selenium-RC 是Selenium项目的第一个工具,它可以自动化浏览器中的Web应用。这个项目已经不在更新,新的推荐替代为WebDriver。

    • Selenium WebDriver 是一个支持浏览器自动化的工具。它包括一组为不同语言提供的类库和“驱动”(drivers)可以使浏览器上的动作自动化

    • Selenium Grid 可以使我们在远程多个浏览器,多台主机上进行自动化测试

    WebDriver是什么?

    WebDriver为很多语言提供类库:Java,C#,Ruby,JavaScript,Python,PHP,Perl和其他语言。这样就可以使使用WebDriver的开发人员使用自己最熟悉的语言,而不需要去学习WebDriver独有的脚本语言,使用WebDriver就像在自己项目中使用一个第三方库一样。

    WebDriver用“驱动”(driver)去控制不同的浏览器。目前驱动支持的浏览器包括Firefox,Chrome,Safari和IE。微软正在为Mcirosoft Edge研发新的driver。Firefox的driver是内置的,所以Firefox是多数项目进行自动化测试的首选。

    WebDriver与“驱动”(driver)间用JSON协议进行通信,这种方式已经成为W3C标准。这就意味着,浏览器厂商会更愿意在生产他们自己的drivers时去满足支持WebDriver标准。即希望微软会为IE driver负责,苹果会为Safari的driver负责。

    WebDriver还有一个移动驱动叫做Appium,它允许测试代码在移动设备和平板上运行。

    因为WebDriver有Selenium Grid,云服务提供商可以为我们提供多种不同版本的浏览器及操作系统环境,让我们的测试在不同环境组合下运行。这种服务通常需要付费,但是与自己构建具有不同操作系统和不同浏览器的grid使用的时间和资源成本相比,还是负担得起的。

    本质上Selenium是一个生态系统,我们可以进行本地桌面,本地移动设备,跨平台测试,我们不需要使用Windows,Mac或是Linux操作系统。我们可以选择自己项目团队最合适的编程语言。我们可以并行或远程执行我们的测试。所有需要做的就是学习如何使用WebDriver。

    获取更多关于Selenium和自动化测试的信息可以访问课程web application testing with Selenium

    WebDriver干什么?

    WebDriver可是使浏览器自动化。WebDriver可以为我们打开URL与渲染出的页面进行交互:

    • 新建一个浏览器实例
    • 在浏览器中打开一个URL
    • 点击页面上的链接
    • 在字段中输入信息
    • 在页面中执行JavaScript

    WebDriver不是一个测试REST APIs、SOAP APIs或数据库的工具。

    它是一个自动化浏览器的工具。

    因为WebDriver本质上是一个库,我们可以将其与其他库一起使用,调用其他API或者对数据库进行操作。

    通常WebDriver与其他库一起使用,访问数据库检查结果,使用REST库进行API调用,然后在WebDriver页面上检查结果。

    相关文章

      网友评论

        本文标题:爬虫(五)(headless-browers)动态内容

        本文链接:https://www.haomeiwen.com/subject/vhncoxtx.html