2016-12-25 7 views
0

https://panthers.strmarketplace.com/Permanent-Seat-Licenses/For-Sale.aspxЯ хочу отказаться от нижней таблицы на этом веб-сайте, используя Horseman и PhantomJS. Что мне делать?

Нижняя таблица нуждается в прокрутке, чтобы показать больше данных. Это код, который я написал до сих пор:

horseman 
    .open("https://panthers.strmarketplace.com/Permanent-Seat-Licenses/For-Sale.aspx") 
    .waitForSelector('div.ui-grid-cell-contents') 
    .text('div.ui-grid-cell-contents.ng-binding.ng-scope') 
    .then(function(data) { 
     console.log(data); 
    }); 

Что я должен добавить, или улучшить, чтобы прокрутить по всей таблице и получить все данные из ячеек?

Обновление для-Бабков (возвращает неопределенное значение):

var Horseman = require("node-horseman"); 
var horseman = new Horseman({timeout: 50000}); 

horseman 
.open("https://texans.seasonticketrights.com/Permanent-Seat-Licenses/For-Sale.aspx") 
.waitForSelector("div.ui-grid-cell-contents.ng-binding.ng-scope") 
.evaluate(function() { 
    return angular.element($("div.ui-grid-canvas").get(0)).scope().rowContainer.visibleRowCache; 
}) 
.then(function(item) { 
    console.log(item); 
}); 
+0

Если бы я был вами, я бы попытался получить данные непосредственно из Angular Scope вместо прокрутки. Это даст вам скорость и надежность. Если вы открываете страницу в Chrome DevTools, следующая команда в консоли дает вам дату таблицы: angular.element ($ ('. Ui-grid-canvas'). Get (0)). Scope(). RowContainer. visibleRowCache –

+0

@ a-bobkov Как это сделать в Node.js? –

+0

Всадник, который вы используете, имеет функцию «оценить» - https://github.com/johntitus/node-horseman#evaluatefn-arg1-arg2 –

ответ

0

В качестве рабочего примера, скрипт ниже печатает все «Листинг #» из таблицы. Надеюсь, это поможет.

var Horseman = require("node-horseman"); 
var horseman = new Horseman({timeout: 50000}); 

horseman 
    .open("https://texans.seasonticketrights.com/Permanent-Seat-Licenses/For-Sale.aspx") 
    .waitForSelector("div.ui-grid-cell-contents.ng-binding.ng-scope") 
    .evaluate(function() { 
     return angular.element($("div.ui-grid-canvas").get(0)).scope().rowContainer.visibleRowCache.map(function(listing) {return listing.entity.ListingID;}).join(','); 
    }) 
    .then(function(listingIDs) { 
     console.log(listingIDs); 
    }) 
;