Веб-скребок в расширении 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, нет?