#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 и получает результат, затем отправляет его обратно на вашу веб-страницу.
Да, это определенно возможно.
- Сначала убедитесь, что ваш скрипт phantomjs делает то, что вы хотите, сам по себе, он должен нормально работать при вызове из командной строки
- Затем вам нужно создать обработчик запросов на стороне сервера, он примет ваш запрос на нажатие кнопки, вызовет 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.