2011-12-26 3 views

ответ

3

Вы должны взглянуть на CasperJS. Это очень хороший скрипт PhantomJS, который позволяет вам легко выполнять такое поведение в Интернете.

Насколько общение с PhantomJS сценарием, так как стоит сегодня, у вас есть несколько надежных вариантов:

  1. Передайте свои данные с помощью командной строки арг.
  2. Обмен данными посредством чтения/записи файлов.
  3. Попросите свой скрипт PhantomJS выполнить сценарий Node.js через GETS/POSTS.
1

Да, есть проблема в мосте QtWebKit между C++ и JS для передачи информации вверх и вниз. Это работает, но лучше от JS до C++, чем наоборот.

У нас есть ряд вопросов для решения, но это один из самых высоких в первом номере по требованию.

В том же время, я обычно «украшаю» page объект так:

var page = require("webpage").create(); 

page.evaluateWithParams = function(func) { 
    var args = [].slice.call(arguments, 1), 
     str = 'function() { return (' + func.toString() + ')(', 
     i, ilen, arg; 

    for (i = 0, ilen = args.length; i < ilen; ++i) { 
     arg = args[i]; 
     if (/object|string/.test(typeof arg)) { 
      str += 'JSON.parse(' + JSON.stringify(JSON.stringify(arg)) + '),'; 
     } else { 
      str += arg + ','; 
     } 
    } 
    str = str.replace(/,$/, '); }'); 
    return this.evaluate(str); 
} 

И тогда вы можете вызвать функцию в пределах объема страницы, как это:

var a = 1, b = 2; 
page.evaluateWithParams(function(arg1, args) { 
    // your code that uses arg1 and arg2 
}, a, b); 

Надежда это помогает.

Ivan

Смежные вопросы