2015-06-26 3 views
0

Я пытаюсь создать конструктор объекта article, который содержит такие атрибуты, как название документа, автора и т. Д., И использовать создание экземпляров объекта на основе разных URL-адресов, которые я передаю ему. В приведенном ниже примере this.articleText должен возвращать массив строк, но он ничего не возвращает.CasperJS & Object

Это отличие от this.headlineText, которое возвращает строку hello, как и ожидалось.

Учитывая эту разницу, я подозреваю, что основной причиной проблемы является объект document, используемый в конструкторе. Однако никаких ошибок, возникающих при выпуске, не возникает, поэтому как мне это разрешить?

Любые предложения с благодарностью. (Там нет проблем с самим селектором CSS, если я использую функцию, чтобы получить строку статьи, то это похоже на работу Проблемы при попытке использовать объект для анализа данных.)

var fs = require('fs'); 
var casper = require("casper").create({ 
    verbose: true, 
    logLevel: "debug" 
}); 

function article(title, url) { 
    this.headlineText = title; 
    this.urlString = url; 
    var query = document.querySelectorAll("[itemprop='articleBody']"); 

    this.articleText = Array.prototype.map.call(query, function (e) { 
     return e.innerText; 
    }); 
} 


casper.start("http://www.yomiuri.co.jp/economy/20150625-OYT1T50136.html" ,  function() { 
    this.test.assertExists({ 
     type: 'css', 
     path: '[itemprop="articleBody"]' 
    }, 'Article Exists'); 
}); 


casper.run(function() { 
    var test1 = new article("hello","http://www.yomiuri.co.jp/economy/20150625-OYT1T50136.html"); 

    console.log("HEADLINE=="); 
    console.log(test1.headlineText); // returns "hello" 

    console.log("ARTICLE == "); 
    console.log(test1.articleText); // returns nothing 

    this.exit(); 
}); 

ответ

0

Eсти непонимание того, как вы можете получить доступ к объекту документа на странице. Вы должны использовать оценки, вызывают все вызовы страниц выполняются в песочнице:

CasperJS evaluate()

Таким образом, вы должны позвонить оценить, и вернуться от него вашего querySelectorAll, а затем передаются, что один к вашей функции :)

Успехов

+0

Да - структура программы полностью в отличие от селена, который вызывает у меня головную боль ... Я переписан, чтобы вызвать функцию оценки в рамках Каспера. то (функция() {...}); – JSB

0

Всякий раз, когда вы хотите запустить яваскрипта конкретный код, который вы должны запустить его с помощью evaluate функции, которые выполняются в песочнице.

Вы хотите написать что-то вроде этого

casper.then(function() { 
     var a = this.evaluate(article(title, url),{title:'hello',url:'url'}); 
}); 
Смежные вопросы