Запуск скрипта PhantomJS при нажатии кнопки

#javascript #jquery #ruby #node.js #phantomjs

#javascript #jquery #ruby #node.js #phantomjs

Вопрос:

Контекст: я очищал некоторые веб-сайты с помощью NodeJS / jQuery, и у меня возникли проблемы, потому что я хотел, чтобы некоторые элементы страницы были сгенерированы динамически. Затем я исследовал это и обнаружил, что PhantomJS является лучшим вариантом для этого случая. ~ Огоооо, отлично. ~

Теперь я хочу создать действительно простой веб-сайт (только кнопка?) просто для выполнения этого PhantomJS.

Пример кода того, что я делаю:

 var page = require("webpage").create();
page.open('https://website.that.Iam.scraping.com', function(status) { ... 
  

И я вызываю этот PhantomJS в bash, как:

 phantomjs scraper.js
  

Желаемый результат:
Простая веб-страница пользовательского интерфейса с кнопкой (которая запускает скрипт phantomjs) и результат работы скрипта, также появляющийся на веб-странице.

Вопрос: как я могу запустить этот PhantomJS при нажатии кнопки? Возможно ли это?

PS: Я думал создать веб-сайт на Ruby. Это хороший вариант?

Заранее большое спасибо, ребята! Хорошего дня!

Комментарии:

1. При нажатии кнопки на странице, которой вы не владеете? Вам нужно будет перебрать все, что вас интересует (возможно, использовать путь X) и подключить прослушиватель, который останавливает распространение и запускает некоторое сообщение журнала, которое может захватить ваш фантомный скрипт.

2. При нажатии кнопки на странице, которой вы не владеете? Кнопка находится на моей веб-странице, и она запускает phantomjs (который очищает другую страницу). XPath может это сделать? («Активировать» скрипт phantomjs?). Но как я мог прикрепить этот прослушиватель к моей веб-странице?

Ответ №1:

Я думаю, вам нужна простая веб-страница с одной кнопкой, вы нажимаете на нее, она связывается с сервером, а сервер запускает скрипт phantomjs и получает результат, затем отправляет его обратно на вашу веб-страницу.

Да, это определенно возможно.

  1. Сначала убедитесь, что ваш скрипт phantomjs делает то, что вы хотите, сам по себе, он должен нормально работать при вызове из командной строки
  2. Затем вам нужно создать обработчик запросов на стороне сервера, он примет ваш запрос на нажатие кнопки, вызовет phantomjs (путем создания нового подпроцесса для phantomjs и ожидания его выполнения, получите его результат, когда это будет сделано, просто подумайте о своем коде на стороне сервера как о простой командной строке bash), отправьте результат обратно и отобразите его на своей странице.

Ruby отлично подходит для создания такой вещи.

Комментарии:

1. Определенно, вы поняли! Просто вопрос о том, что вы упомянули: как сделать этот вызов phantomjs на стороне сервера? Я имею в виду, давайте предположим, что у меня есть server.js выполняется локально. В этом файле у меня был бы обработчик запроса кнопки, вызывающий phantomjs .

2. Таким образом, phantomjs делает то, что должен делать, возвращает информацию в server.js . Наконец, я получаю эту информацию с сервера и показываю на веб-странице. Вы имеете в виду этот поток? Спасибо за твой ответ, чувак!

3. С помощью node.js , вы можете проверить документ дочернего процесса , вы будете знать, как вызвать внешнюю программу (здесь это ваш скрипт phantomjs), и вы также можете получить выходные данные из скриптов phantomjs, прочитав из child.stdout , для ruby это почти то же самое.

4. Я следовал тому, что вы упомянули, но я думаю, что мне не хватает какой-то концепции. Где я нахожусь: теперь у меня запущен сервер и вызывается скрипт phantomjs. Я получаю результаты из фантомного скрипта (но в консоли). Что я хочу: я хочу вызвать этот метод (то есть файл сервера) одним нажатием кнопки и отобразить эти результаты, которые я вижу в консоли на веб-странице. Вы знаете, как я мог это сделать?

5. @FelpS. Имейте в виду, что нам не нравятся вопросы-хамелеоны, когда спрашивающий постоянно задает дополнительные вопросы. Если вы не можете решить проблему самостоятельно, вы можете задать новый вопрос (переполнение стека не для обсуждения). Учитывая вашу проблему: поскольку я не знаю вашего кода, похоже, вы просто что-то записываете в консоль. Я знаю, что в PHP консоль и содержимое страницы не являются отдельными, но на других языках они разделены, и вы можете иметь и то, и другое: одновременно записывать некоторые журналы на консоль и создавать DOM для вывода HTML.