Очистка экрана веб-страницы ASP.NET для получения данных, отображаемых в виде сетки - PullRequest
2 голосов
/ 25 марта 2009

Я использую RUBY для скрапа веб-страницы (созданной на asp.net), которая использует gridview для отображения данных. Я успешно могу прочитать данные, отображаемые на странице 1 таблицы, но не могу понять, как мне перейти на следующую страницу таблицы, чтобы прочитать все данные.

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

Пример гиперссылки: -

<a href="javascript:__doPostBack('gvw_offices','Page$6')" style="color:Black;">6</a>

Ответы [ 4 ]

2 голосов
/ 25 марта 2009

Я рекомендую использовать Watir, библиотеку ruby, предназначенную для тестирования браузера, если вы уже используете ruby ​​для обработки. Во-первых, он дает вам гораздо более приятный интерфейс для элементов DOM на странице, и упрощает переход по таким ссылкам:

ie.link(:text, '6').click

Тогда, конечно, у вас есть более простые способы навигации по таблице. Достаточно просто автоматизировать этот процесс:

1..total_number_of_pages.each do |next_page|

  ie.link(:text, next_page).click
  # table processing goes here

end

Я не знаю ваш вариант использования, но у этого подхода есть свои преимущества и недостатки. Во-первых, он на самом деле запускает экземпляр браузера, поэтому, если вам часто нужно тихо работать в фоновом режиме в автоматическом режиме, это может быть не лучшим подходом. С другой стороны, если нормально запускать экземпляр браузера, вам не нужно беспокоиться обо всей этой ерунде обратной передачи, и вы можете просто щелкнуть ссылку, как если бы вы были пользователем.

Watir: http://wtr.rubyforge.org/

2 голосов
/ 25 марта 2009

Вам необходимо выяснить фактический URL.

Вариант 1a: откройте страницу в браузере с хорошей поддержкой разработчиков (например, Firefox с инструментами веб-разработки) и просмотрите источник, чтобы найти, где определено _doPostBack. Выясните, какой URL он создает. Обратите внимание, что он может быть не в источнике главной страницы, а в том, что загружает страница.

Вариант 1b: То же самое, но сделайте это с рубином. Если вы загружаете страницу с помощью Net: HTTP, у вас уже есть инструменты для определения определения __doPostBack (тело в виде строки, grep ruby ​​и возможность запрашивать дополнительные файлы, например, в тегах скрипта ).

Вариант 2. Отслеживание трафика между браузером и страницей (например, с помощью прокси-сервера регистрации), чтобы выяснить, что такое URL.

Вариант 3. Спросите владельца веб-страницы.

Вариант 4: Угадай. Это может быть не так плохо, как кажется (например, если исходный URL оканчивается на «...? Page = 1» или что-то в этом роде), но в целом это наименее вероятно, сработает.

Изменить (в ответ на ваш комментарий на другой вопрос):

Если вы используете библиотеку Net: HTTP, вы можете выполнить обратную передачу, просто заменив get на post, например, my_http.post(my_url) вместо my_http.get(my_url)

Редактировать (в ответ на ответ Даниэльтальского):

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

1 голос
/ 25 марта 2009

Вам придется выполнить обратную передачу. Данные передаются с формой POST обратно на сервер. Как сказал Маркус, используйте что-то вроде FireBug или Developer Tools в IE 8 и fiddler для отслеживания трафика. Но, честно говоря, это веб-форма, использующая раздутый GridView, и вас ждет веселое приключение. ;)

0 голосов
/ 25 марта 2009

Вам нужно будет провести некоторое исследование, чтобы выяснить, какой HTTP-запрос выполняет выполнение javascript. Я использовал браузер Mozilla с плагином Firebug, а также плагин «Live HTTP Headers», чтобы помочь определить, что происходит. Скорее всего, вам станет ясно, какие запросы вам нужно будет сделать, чтобы перейти на следующую страницу. Удостоверьтесь, что вы обращаете внимание на то, какие куки будут установлены.

У меня был действительно хороший успех, используя Механизировать для очистки. Он оборачивает все HTTP-сообщения, html-разбор и поиск (используя Nokogiri ), перенаправление и удержание файлов cookie. Но он не знает, как выполнить Javascript, поэтому вам нужно выяснить, какой http-запрос выполнить самостоятельно.

...