Подтвердить что ты не робот

Как вы очищаете страницы AJAX?

Пожалуйста, сообщите, как очистить страницы AJAX.

4b9b3361

Ответ 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 (предполагая, что вы знаете, как его создать, а также его архитектуру и возможности. Это легко учиться и практиковать, поскольку есть много образцов),

  1. Используйте скрипты содержимого для доступа к DOM, используя xpath. В значительной степени получить весь список или таблицу или динамически визуализированный контент, используя xpath в переменной, как строку HTML Узлы. (Только контент-скрипты могут обращаться к DOM, но не могут обращаться к URL-адресу с помощью XMLHTTP)
  2. Из сценария контента, используя передачу сообщений, передайте всю разделенную DOM как строку, в фоновый скрипт. (Фоновые скрипты могут разговаривать с URL-адресами, но не могут касаться DOM). Мы используем передачу сообщений, чтобы заставить их говорить.
  3. Вы можете использовать различные события для циклического перехода через веб-страницы и передавать каждый выделенный контент HTML-узла в фоновый скрипт.
  4. Теперь используйте фоновый скрипт, чтобы поговорить с внешним сервером (на локальном хосте), простым, созданным с помощью Nodejs/python. Просто отправьте все HTML-узлы в виде строки, на сервер, где сервер будет просто сохранять содержимое, размещенное на нем, в файлы с соответствующими переменными для идентификации номеров страниц или URL-адресов.
  5. Теперь вы очистили содержимое AJAX (узлы HTML как строку), но это частичные узлы html. Теперь вы можете использовать свою любимую библиотеку XPATH для загрузки их в память и использовать XPATH для очистки информации до таблиц или текста.

Прошу прокомментировать, если вы не можете понять, и я могу написать его лучше. ( Первая попытка). Кроме того, я пытаюсь как можно скорее выпустить образец кода.