selenium-webdriver
先启动chromedriver
$ chromedriver
Starting ChromeDriver 2.19.346063 (38b35413bd4a486d436a9749e090454bc9ff6708) on port 9515
Only local connections are allowed.
先试试看标准方法findElement(body).getText(),执行100次。因为是异步的,所以得等最后一个结果出来了再算时间。
var webdriver = require('selenium-webdriver'); var driver = new webdriver.Builder().usingServer('http://localhost:9515').forBrowser('chrome').build(); driver.get('http://r.gnavi.co.jp/k4993ww30000/').then(function() { var ts = Date.now(); for(var i = 0; i < 100; i++) { driver.findElement(webdriver.By.tagName('body')).getText().then(function(text){ --i == 0 && console.log('total time: ' + (Date.now() - ts) + ' ms'); }); } }); driver.quit();
运行,结果很慢,平均一次需要271毫秒:$ node test.js total time: 27143 ms
这可能findElement,getText每次都要和chromedriver往返通信造成的。再试试看executeScript('return document.body.innerText')
var webdriver = require('selenium-webdriver'); var driver = new webdriver.Builder().usingServer('http://localhost:9515').forBrowser('chrome').build(); driver.get('http://r.gnavi.co.jp/k4993ww30000/').then(function() { var ts = Date.now(); for(var i = 0; i < 100; i++) { driver.executeScript('return document.body.innerText').then(function(text){ --i == 0 && console.log('total time: ' + (Date.now() - ts) + ' ms'); }); } }); driver.quit();
运行,结果快多了,平均一次只要7.7毫秒:$ node test.js total time:: 770 ms
PhantomJS
他的evaluate是同步执行的,所以在100次循环后直接打印出时间差。
var page = require('webpage').create(); page.open('http://r.gnavi.co.jp/k4993ww30000/', function(status) { console.log("Status: " + status); if(status === "success") { var ts = Date.now(); for(var i = 0; i < 100; i++) { var t = page.evaluate(function() { return document.body.innerText; }); } console.log('total time: ' + (Date.now() - ts) + ' ms') } phantom.exit(); });
运行,结果平均一次只要0.2毫秒:$ phantomjs ~/tmp/phantomjs_test/a.js Status: success total time: 20 ms
没有评论:
发表评论