资讯专栏INFORMATION COLUMN

使用 Selenium 抓取网页内容和模拟登入

mylxsw / 1540人阅读

摘要:传统的无法执行页面中的浏览器脚本,并且在抓取一些对爬虫有限制的网页时,往往要设定详细的来突破限制,编写起来较为复杂。直接使用浏览器运行,像真正的用户在操作。支持以下方式进行选择元素各种库对情况的检测方法

传统的 cURL 无法执行页面中的浏览器脚本,并且在抓取一些对爬虫有限制的网页时,往往要设定详细的 http header 来突破限制,编写起来较为复杂。

Selenium简介:

Selenium 是一个用于Web应用程序测试的工具(用处也不仅仅是测试)。
Selenium 直接使用浏览器运行,像真正的用户在操作。支持较多的浏览器。

组件

Selenium IDE:Firefox插件,有录制脚本的功能。支持自动录制动作和自动生成其他语言的自动化脚本。

Selenium Remote Control (RC) :支持多种平台(Windows,Linux)和多浏览器(IE,Firefox,Opera,Safari,Chrome),可以用多种语言(Java,Ruby,Python,Perl,PHP,C#)编写用例。

Selenium Grid :允许Selenium-RC 针对规模庞大的测试案例集或者需要在不同环境中运行的测试案例集进行扩展。


实例:驱动 chrome 模拟登入淘宝,获取页面信息

1.前往项目主页:SeleniumHQ 下载

Selenium Server (formerly the Selenium RC Server)

Third Party Browser Drivers NOT DEVELOPED by seleniumhq

(选择chrome的driver)

Third Party Language Bindings NOT DEVELOPED by seleniumhq

(选择PHP by Adam Goucher (SeHQ recommended php client))

2.打开 selenium

java -jar path_to_selenium.jar 
[-timeout 0] 
[-Dwebdriver.server.session.timeout=0] 
-Dwebdriver.chrome.driver="path_to_chrome_driver"
-browser [-timeout=0] [-browserTimeout=0]
browserName=chrome,[timeout=0]

如需长时间运行请酌情设置各 "[ ]" 中的超时时间

3.PHP代码

execute(array("script" => "return (document.readyState != "complete")", "args" => array())));
}  //该函数会把脚本挂起直到等待到Ajax结束

require_once "webdriver/PHPWebDriver/__init__.php";
// 引入 selenium 的PHP封装函数库
// 下载地址:https://github.com/Element-34/php-webdriver
// 文档中有各种操作浏览器方法,如获取所有cookie等

$wd_host = "http://127.0.0.1:4444/wd/hub";
$web_driver = new PHPWebDriver_WebDriver($wd_host);

$session = $web_driver->session("chrome");

//设置超时时间
$session->implicitlyWait(5);
$session->setScriptTimeout(5);
$session->setPageLoadTimeout(15);

//打开连接
$session->open("http://login.m.taobao.com/login.htm?tpl_redirect_url=http://m.taobao.com");

//输入验证码用,如果需要的话
sleep(5);

//请设置好帐号密码
$session->element("css selector", "input[name=TPL_username]")->value(array("value" => str_split("your_username")));
$session->element("css selector", "input[name=TPL_password]")->value(array("value" => str_split("your_password")));

//模拟点击登入按钮
$elements = $session->element("css selector", ".c-btn-oran-big")->click();

//打开 m.taobao.com,此时已获取到cookie
$session->open("http://m.taobao.com/");

//等待ajax加载完毕
waitForAjax();

$elements = $session->element("css selector", "body")->text();
//获得了登入后ajax执行完毕时的页面内容
?>

之后便可以按需对 $session 实例进行 element 方法的各种操作。

支持以下方式进行选择元素

id

xpath

link text

partial link text

name

tag name

class name

css selector


PS:各种库对Ajax情况的检测方法

jQuery: "jQuery.active"

Prototype: "Ajax.activeRequestCount"

Dojo: "dojo.io.XMLHTTPTransport.inFlight.length"

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20604.html

相关文章

  • 使用 Selenium 进行模拟登入页面内容的获取

    摘要:传统的无法执行页面中的浏览器脚本,并且在抓取一些对爬虫有限制的网页时,往往要设定详细的来突破限制,编写起来较为复杂。直接使用浏览器运行,像真正的用户在操作。支持以下方式进行选择元素各种库对情况的检测方法 传统的 cURL 无法执行页面中的浏览器脚本,并且在抓取一些对爬虫有限制的网页时,往往要设定详细的 http header 来突破限制,编写起来较为复杂。 Selenium简介: ...

    thursday 评论0 收藏0
  • Python3网络爬虫实战---37、动态渲染页面抓取:Selenium

    摘要:不过动态渲染的页面不止这一种。再有淘宝这种页面,它即使是获取的数据,但是其接口含有很多加密参数,我们难以直接找出其规律,也很难直接分析来抓取。我们用一个实例来感受一下在这里们依然是先打开知乎页面,然后获取提问按钮这个节点,再将其 上一篇文章:Python3网络爬虫实战---36、分析Ajax爬取今日头条街拍美图下一篇文章:Python3网络爬虫实战---38、动态渲染页面抓取:Spla...

    zhjx922 评论0 收藏0
  • 使用selenium模拟浏览器抓取淘宝商品美食信息

    摘要:目标通过模拟浏览器抓取淘宝商品美食信息,并存储到数据库中。流程框架淘宝页面比较复杂,含有各种请求参数和加密参数,如果直接请求或者分析将会非常繁琐。 目标 通过Selenium模拟浏览器抓取淘宝商品美食信息,并存储到MongoDB数据库中。 流程框架 淘宝页面比较复杂,含有各种请求参数和加密参数,如果直接请求或者分析Ajax将会非常繁琐。Selenium是一个自动化测试工具,可以驱动浏览...

    djfml 评论0 收藏0
  • 从0-1打造最强性能Scrapy爬虫集群

    摘要:包括爬虫编写爬虫避禁动态网页数据抓取部署分布式爬虫系统监测共六个内容,结合实际定向抓取腾讯新闻数据,通过测试检验系统性能。 1 项目介绍 本项目的主要内容是分布式网络新闻抓取系统设计与实现。主要有以下几个部分来介绍: (1)深入分析网络新闻爬虫的特点,设计了分布式网络新闻抓取系统爬取策略、抓取字段、动态网页抓取方法、分布式结构、系统监测和数据存储六个关键功能。 (2)结合程序代码分解说...

    vincent_xyb 评论0 收藏0
  • Python入门网络爬虫之精华版

    摘要:学习网络爬虫主要分个大的版块抓取,分析,存储另外,比较常用的爬虫框架,这里最后也详细介绍一下。网络爬虫要做的,简单来说,就是实现浏览器的功能。 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下。 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫,当我们在浏览器中输入...

    Bmob 评论0 收藏0

发表评论

0条评论

mylxsw

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<