传统的 cURL
没法执行页面中的浏览器脚本,而且在抓取一些对爬虫有限制的网页时,每每要设定详细的 http header
来突破限制,编写起来较为复杂。php
Selenium
是一个用于Web应用程序测试的工具(用处也不单单是测试)。
Selenium
直接使用浏览器运行,像真正的用户在操做。支持较多的浏览器。css
Selenium IDE
:Firefox插件,有录制脚本的功能。支持自动录制动做和自动生成其余语言的自动化脚本。java
Selenium Remote Control (RC)
:支持多种平台(Windows,Linux)和多浏览器(IE,Firefox,Opera,Safari,Chrome),能够用多种语言(Java,Ruby,Python,Perl,PHP,C#)编写用例。git
Selenium Grid
:容许Selenium-RC 针对规模庞大的测试案例集或者须要在不一样环境中运行的测试案例集进行扩展。github
1.前往项目主页:SeleniumHQ 下载web
Selenium Server (formerly the Selenium RC Server)
ajax
Third Party Browser Drivers NOT DEVELOPED by seleniumhq
chrome
(选择chrome的driver)浏览器
Third Party Language Bindings NOT DEVELOPED by seleniumhq
(选择PHP by Adam Goucher (SeHQ recommended php client))bash
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 方法的各类操做。
支持如下方式进行选择元素
jQuery
: "jQuery.active"
Prototype
: "Ajax.activeRequestCount"
Dojo
: "dojo.io.XMLHTTPTransport.inFlight.length"