PhantomJS: как набирать текст в текстовое поле? - PullRequest
3 голосов
/ 26 декабря 2011

Единственное решение, которое я могу придумать, - это сделать это с JS, но я не могу передать переменные из фантомного сценария в JS, который пытаюсь выполнить.

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

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

Что касается взаимодействия с вашим скриптом PhantomJS, как сегодня, у вас есть несколько надежных вариантов:

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

Да, существует проблема в мосте 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);

Надеюсь, это поможет.

Иван

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...