Веб-скребок в расширении Google Chrome (API JavaScript + Chrome)

Каковы наилучшие варианты для выполнения Веб-скрепок открытой вкладки в рамках расширения Google Chrome с JavaScript и любыми другими технологиями. Другие JavaScript-библиотеки также принимаются.

Важно, чтобы скребок выглядел как обычный веб-запрос. Нет указаний на AJAX или XMLHttpRequest, например X-Requested-With: XMLHttpRequest или Origin.

Скребковый контент должен быть доступен из JavaScript для дальнейшей обработки и представления внутри расширения, скорее всего, в виде строки.

Есть ли какие-либо крючки в любом API-интерфейсе WebKit/Chrome: s, который можно использовать для создания обычного веб-запроса и получения результатов для манипуляции?

var pageContent = getPageContent(url); // TODO: Implement
var items = $(pageContent).find('.item');
// Display items with further selections

Бонусные баллы, чтобы сделать эту работу из локального файла на диске, для начальной отладки. Но если это единственная точка - это остановить решение, то проигнорируйте бонусные очки.

Ответ 1

Попытайтесь использовать XHR2 responseType = "document" и вернуться обратно (new DOMParser).parseFromString(responseText, getResponseHeader("Content-Type")) с моим патчем text/html. См. Https://gist.github.com/1138724 для примера того, как я обнаруживаю responseType = "document поддержка responseType = "document (синхронно проверяя response === null на URL-адрес объекта, созданный из text/html blob).

Используйте API Chrome WebRequest, чтобы скрыть заголовки X-Requested-With и т.д.

Ответ 2

Если вы прекрасно разбираетесь в чем-то, кроме плагина Google Chrome, посмотрите phantomjs, который использует Qt-Webkit в фоновом режиме и запускает только как браузер, включающий создание аякс-запросов. Вы можете назвать его безгласным браузером, так как он не отображает вывод на экране и может работать в фоновом режиме, когда вы делаете другие вещи. Если вы хотите, вы можете экспортировать изображения, pdf из страниц, которые он извлекает. Он предоставляет интерфейс JS для загрузки страниц, нажатия на кнопки и т.д., Как у вас в браузере. Вы также можете добавить пользовательскую JS, например jQuery, на любую страницу, которую вы хотите очистить, и использовать ее для доступа к dom и экспорта желаемых данных. Поскольку его использование Webkit, его поведение рендеринга точно так же, как Google Chrome.

Другой вариант - использовать Aptana Jaxer, который основан на Mozilla Engine и является очень хорошей концепцией сам по себе. Он также может использоваться как простой инструмент для очистки.

Ответ 3

Скребок веб-страниц является сложным в Chrome Extension. Некоторые моменты:

  • Вы запускаете скрипты содержимого для доступа к DOM.
  • Фоновые страницы (по одному на каждого браузера) могут отправлять и получать сообщения в сценарии содержания. То есть вы можете запустить контент script, который устанавливает конечную точку RPC и запускает указанный обратный вызов в контексте фоновой страницы в качестве ответа.
  • Вы можете выполнять скрипты содержимого во всех фреймах веб-страницы, а затем сшить дерево документов (состоящее из кадров 1..N, содержащее страницу).
  • Как S.K. предположил, что ваша фоновая страница может отправлять данные в виде XMLHttpRequest на какой-то легкий HTTP-сервер, который прослушивает локально.

Ответ 4

С момента возникновения этого вопроса было выпущено множество инструментов.

artoo.js является одним из них. Это часть кода JavaScript, предназначенная для запуска в консоли браузера, чтобы предоставить вам некоторые утилиты очистки. Он также может использоваться как расширение хром.

Ответ 5

Я не уверен, что это возможно только с помощью JavaScript, но если вы можете настроить выделенный PHP script для своего расширения, который использует cURL для извлечения HTML для страницы, PHP скрипт может очистить страницу для вас и вашего расширения можно прочитать его через запрос AJAX.

Фактическая страница, очищаемая, не будет знать этого запроса AJAX, однако, поскольку к нему обращаются через cURL.

Ответ 6

Я думаю, вы можете начать с этого .

Итак, вы можете попробовать использовать комбинацию Extension + Plugin. Расширение будет иметь доступ к DOM (включая плагин) и управлять процессом. И плагин отправит фактические HTTP-запросы.

Я могу порекомендовать использовать Firebreath в качестве платформы кроссплатформенной платформы Chrome/Firefox, в частности, взгляните на этот пример: Firebreath - Создание + HTTP + Запросы + с + SimpleStreamsHelper

Ответ 7

Разве вы не могли бы сделать некоторые трюки iframe? если вы загружаете URL-адрес в выделенный фрейм, у вас есть dom в объекте документа и вы можете выполнить выбор jquery, нет?