Пожалуйста, сообщите, как очистить страницы AJAX.
Как вы очищаете страницы AJAX?
Ответ 1
Обзор:
Все скрипы экрана сначала требуют ручного просмотра страницы, из которой вы хотите извлечь ресурсы. Когда вы работаете с AJAX, вам обычно просто нужно анализировать немного больше, чем просто HTML.
При работе с AJAX это просто означает, что требуемое значение не находится в исходном HTML-документе, который вы запросили, но будет выведен javascript, который запрашивает у вас дополнительную информацию.
Таким образом, вы можете просто просто проанализировать javascript и посмотреть, какой запрос делает javascript, и просто вызвать этот URL вместо этого.
Пример:
Возьмите это в качестве примера, предположим, что страница, которую вы хотите очистить, имеет следующий script:
<script type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","time.asp",true);
xmlHttp.send(null);
}
</script>
Тогда все, что вам нужно сделать, это вместо этого HTTP-запрос на time.asp того же сервера. Пример из w3schools.
Расширенный скребок с С++:
Для сложного использования, и если вы используете С++, вы также можете использовать механизм javascript firefox SpiderMonkey для выполнения javascript на страница.
Расширенный скребок с Java:
Для сложного использования, и если вы используете Java, вы также можете рассмотреть использование javascript-механизма firefox для Java Rhino
Расширенный скребок с .NET:
Для сложного использования, и если вы используете .Net, вы также можете рассмотреть возможность использования сборки Microsoft.vsa. Недавно был заменен на ICodeCompiler/CodeDOM.
Ответ 2
На мой взгляд, самым простым решением является использование Casperjs, рамки на основе фантомных браузеров без браузера WebKit.
Вся страница загружается, и очень легко очистить любые связанные с ajax данные. Вы можете проверить этот базовый учебник, чтобы узнать Автоматизация и очистка с помощью PhantomJS и CasperJS
Вы также можете посмотреть этот примерный код, о том, как очистить google предлагает ключевые слова:
/*global casper:true*/
var casper = require('casper').create();
var suggestions = [];
var word = casper.cli.get(0);
if (!word) {
casper.echo('please provide a word').exit(1);
}
casper.start('http://www.google.com/', function() {
this.sendKeys('input[name=q]', word);
});
casper.waitFor(function() {
return this.fetchText('.gsq_a table span').indexOf(word) === 0
}, function() {
suggestions = this.evaluate(function() {
var nodes = document.querySelectorAll('.gsq_a table span');
return [].map.call(nodes, function(node){
return node.textContent;
});
});
});
casper.run(function() {
this.echo(suggestions.join('\n')).exit();
});
Ответ 3
Если вы можете это понять, попробуйте изучить дерево DOM. Selenium делает это как часть тестирования страницы. Он также имеет функции для нажатия кнопок и использования ссылок, которые могут быть полезны.
Ответ 4
Лучший способ очистить веб-страницы с помощью Ajax или на общих страницах с помощью Javascript - это браузер или браузер без браузера (браузер без GUI). В настоящее время phantomjs является хорошо продвинутым браузером без браузера с использованием WebKit. Альтернативой, которую я использовал с успехом, является HtmlUnit (в Java или .NET через IKVM, который является симулированным браузером. Другой известный вариант - это инструмент веб-автоматизации, такой как Selenium.
Я написал много статей по этой теме, например веб-соскабливание сайтов Ajax и Javascript и автоматическая безбуквенная аутентификация OAuth для Twitter. В конце первой статьи есть много дополнительных ресурсов, которые я собираю с 2011 года.
Ответ 5
Зависит от страницы ajax. Первая часть экранирования экрана - это определение того, как работает страница. Есть ли какая-то переменная, которую вы можете перебирать, чтобы запросить все данные со страницы? Лично я использовал Web Scraper Plus для множества связанных с экрана задач, потому что это дешево, не сложно начать, не программисты может заставить его работать относительно быстро.
Боковое примечание. Условия использования, вероятно, где-то вы можете проверить перед этим. В зависимости от сайта, итерация через все может поднять некоторые флаги.
Ответ 6
Мне нравится PhearJS, но это может быть частично потому, что я его создал.
Тем не менее, это сервис, который вы запускаете в фоновом режиме, который говорит HTTP (S) и отображает страницы как JSON для вас, включая любые метаданные, которые могут вам понадобиться.
Ответ 7
В качестве недорогого решения вы также можете попробовать SWExplorerAutomation (SWEA). Программа создает API автоматизации для любого веб-приложения, разработанного с использованием HTML, DHTML или AJAX.
Ответ 8
Я думаю, что ответ Брайана Р. Бонди полезен, когда исходный код легко читается. Я предпочитаю простой способ использования таких инструментов, как Wireshark или HttpAnalyzer, для захвата пакета и получения URL-адреса из поля "Host" и "GET".
Например, я захватываю пакет следующим образом:
GET /hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330
HTTP/1.1
Accept: */*
Referer: http://quote.hexun.com/stock/default.aspx
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: quote.tool.hexun.com
Connection: Keep-Alive
Затем URL-адрес:
http://quote.tool.hexun.com/hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330
Ответ 9
Selenium WebDriver - хорошее решение: вы программируете браузер и автоматизируете то, что необходимо сделать в браузере. Браузеры (Chrome, Firefox и т.д.) Предоставляют свои собственные драйверы, которые работают с Selenium. Поскольку он работает как автоматический REAL-браузер, страницы (включая javascript и Ajax) загружаются так же, как и люди, использующие этот браузер.
Недостатком является то, что он медленный (так как вы, скорее всего, хотели бы дождаться загрузки всех изображений и сценариев, прежде чем приступить к работе на этой отдельной странице).
Ответ 10
Я ранее связывался с MIT-растворителем и EnvJS в качестве своих ответов на очистку страниц Ajax. Эти проекты кажутся недоступными.
Из явной необходимости я изобрел еще один способ на самом деле очистить страницы Ajax, и он работал на таких жестких сайтах, как findthecompany, которые имеют методы поиска безглавых javascript-движков и не показывают никаких данных.
Этот метод заключается в использовании хромовых расширений для очистки. Расширения Chrome - лучшее место для очистки страниц Ajax, потому что они фактически позволяют нам получить доступ к модифицированному Javascript DOM. Техника следующая: я обязательно открою исходный код в какой-то момент. Создайте расширение chrome (предполагая, что вы знаете, как его создать, а также его архитектуру и возможности. Это легко учиться и практиковать, поскольку есть много образцов),
- Используйте скрипты содержимого для доступа к DOM, используя xpath. В значительной степени получить весь список или таблицу или динамически визуализированный контент, используя xpath в переменной, как строку HTML Узлы. (Только контент-скрипты могут обращаться к DOM, но не могут обращаться к URL-адресу с помощью XMLHTTP)
- Из сценария контента, используя передачу сообщений, передайте всю разделенную DOM как строку, в фоновый скрипт. (Фоновые скрипты могут разговаривать с URL-адресами, но не могут касаться DOM). Мы используем передачу сообщений, чтобы заставить их говорить.
- Вы можете использовать различные события для циклического перехода через веб-страницы и передавать каждый выделенный контент HTML-узла в фоновый скрипт.
- Теперь используйте фоновый скрипт, чтобы поговорить с внешним сервером (на локальном хосте), простым, созданным с помощью Nodejs/python. Просто отправьте все HTML-узлы в виде строки, на сервер, где сервер будет просто сохранять содержимое, размещенное на нем, в файлы с соответствующими переменными для идентификации номеров страниц или URL-адресов.
- Теперь вы очистили содержимое AJAX (узлы HTML как строку), но это частичные узлы html. Теперь вы можете использовать свою любимую библиотеку XPATH для загрузки их в память и использовать XPATH для очистки информации до таблиц или текста.
Прошу прокомментировать, если вы не можете понять, и я могу написать его лучше. ( Первая попытка). Кроме того, я пытаюсь как можно скорее выпустить образец кода.