Как смоделировать JavaScript в клиентских приложениях C # - PullRequest
4 голосов
/ 27 мая 2009

Я пишу веб-сканер (веб-паук), который сканирует все ссылки на веб-сайте. Мое приложение - приложение Win32, написанное на C # с .Net framework 3.5. Теперь я использую HttpWebRequest HttpWebResponse для связи с веб-сервером. Я также создал свой собственный Http Parser, который может анализировать все, что я хочу. Я нашел все ссылки, такие как "href", "src", "action" ... в разборе. Но я не могу решить одну проблему: симулировать клиентский скрипт на странице (например, JS и VBS) Например, если ссылка такая:

a href = "javascript: buildLink (1)"

... with buildLink (параметр) - это функция Javascript, которая создает пользовательскую ссылку благодаря параметру.

Пожалуйста, помогите мне решить эту проблему. Как симулировать JavaScript в этом приложении? Я могу разобрать исходный код HTML и перенести весь код JavaScript в другой файл, но как смоделировать его функцию? Благодарю.

Ответы [ 4 ]

3 голосов
/ 27 мая 2009

Ваш единственный реальный вариант - автоматизировать браузер. Как уже говорилось в других ответах, вы не можете надежно смоделировать браузерный javascript, не имея полной DOM.

К счастью, есть способы автоматизировать браузер, посмотрите Selenium .

Он имеет C # API , поэтому вы можете управлять браузером из C #.

Используйте ваш сканер .NET для сканирования сайта. Всякий раз, когда вы встречаете ссылку href="javascript:..., обрабатывайте страницу, содержащую ссылку в Selenium:

  1. Используйте Selenium API, чтобы сообщить браузеру о загрузке страницы.
  2. Используйте API Selenium, чтобы найти все ссылки на странице.

Таким образом, ваш паук использует Selenium только тогда, когда это необходимо (страницы без ссылок javascript могут обрабатываться с помощью уже полученного вами кода браузера без паука). А поскольку это параллельная рабочая нагрузка , вы можете легко запустить одновременно несколько процессов Selenium (на одном компьютере или на других компьютерах).

Но помните, что href="javascript вряд ли единственный способ, которым страница может иметь динамические ссылки. Наиболее распространенным случаем, вероятно, является сценарий onload или $(document).ready(), который манипулирует DOM и добавляет ссылки таким образом.

Чтобы поймать этот случай (и другие), пауку, вероятно, придется использовать Selenium для всех страниц, имеющих тег <script>.

3 голосов
/ 27 мая 2009

По сути, вы притворяетесь браузером, за исключением того, что HttpWebRequest делает только сетевую работу за вас.

Я бы порекомендовал использовать элемент управления т.е. веб-браузер и взаимодействовать с ним из вашего приложения на c #. Это позволит вам запускать JavaScript, устанавливать переменные, отправлять сообщения и т. Д. И т. Д.

Вот некоторые основные ссылки, которые я нашел после поиска «т.е. управление через веб-браузер»:

http://www.c -sharpcorner.com / UploadFile / Махеш / WebBrowserInCSMDB12022005001524AM / WebBrowserInCSMDB.aspx http://support.microsoft.com/kb/313068

2 голосов
/ 27 мая 2009

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

Если бы я занимался этой проблемой, я бы, вероятно, создал бы небольшое стороннее приложение на Java поверх Rhino , с неким слоем RPC-фреймворка, наложенным поверх него, чтобы я мог общаться с ним из моего основного приложения.

К сожалению, не имея полной реализации DOM, вы ограничены только очень простым javascript.

1 голос
/ 27 мая 2009

Вы можете выполнить javascript с помощью , используя движок MS JScript или что-то подобное.

Это не гарантированно сработает, особенно если javascript пытается получить доступ к DOM или что-то подобное ... Но для простых сценариев этого может быть достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...