Вопрос по javascript, .net – Загрузите DOM и выполните javascript на стороне сервера с помощью .Net

7

Я хотел бы загрузить DOM, используя документ (в строковой форме) или URL, а затем выполнить функции JavaScript (включая селекторы jquery) для него. Это будет полностью на стороне сервера, в процессе, без клиента / браузера.

В основном мне нужно загрузить dom, а затем использовать селекторы jquery и функции text () и type val () для извлечения из него строк. Мне не нужно манипулировать домом.

Я смотрел на движки .Net javascript, такие как Jurassic и Jint, но не поддерживает загрузку DOM и поэтому не может делать то, что мне нужно.

Я был бы готов рассмотреть решения, не относящиеся к .Net (node.js, ruby и т. Д.), Если они существуют, но я бы предпочел .Net.

редактироват Ниже приведен хороший ответ, но в настоящее время я пытаюсь выбрать другой маршрут, пытаюсь перенести envjs на юрский период. Если я смогу заставить это работать, я думаю, что он будет делать то, что я хочу, следите за обновлениями ....

Как это будет? Я хотел бы получить выгоду - или внести свой вклад - в такой проект, так как я сделал свою собственную попытку, но пока остановился. Если хотите, просто добавьте @ gmail.com к моему имени SO, и вы можете связаться со мной там. У меня есть проект JavaScript, который добавляет ActiveX в юрский период здесь: jurascript.codeplex.com aikeru

Ваш Ответ

1   ответ
13

что ты пытаешься сделать. Если вашей целью является в основном полная имитация веб-браузера или «безголовый браузер», есть ряд решений, но ни одно из них (о которых я знаю) не существует в .NET. Чтобы имитировать браузер, вам нужен движок JavaScript и DOM. Вы определили несколько двигателей; Я обнаружил, что юрский период - самый крепкий и быстрый. Движок Google Chrome V8 также очень популярен;Neosis Javascript.NET project предоставляет для этого оболочку .NET. Это не совсем чистый .NET, так как у вас есть зависимость не от .NET, но он интегрируется чисто и не вызывает особых проблем.

Но, как вы заметили, вам все еще нужен DOM. В чистом C # есть Xbrowser, но выглядит немного устаревшим. Есть основанные на javascript представления всего DOM браузера, такие как Jsdom, слишком. Вы, вероятно, могли бы запустить jsdom в Jurassic, предоставив вам DOM-симуляцию без браузера, и все это на C # (хотя, вероятно, очень медленно!). В V8 он определенно будет работать нормально. Если вы выходите за пределы области .NET, есть другие, более поддерживаемые решения.Этот вопро обсуждает HtmlUnit. Тогда естьСеле для автоматизации реальных веб-браузеров.

Также имейте в виду, что большая часть работы над этими инструментами предназначена для тестирования. Хотя это не означает, что вы не можете использовать их для чего-то другого, они могут не работать или хорошо интегрироваться для какого-либо стабильного использования встроенного производственного кода. Если вы пытаетесь в основном выполнять HTML-манипуляции в реальном времени, то решение, сочетающее в себе множество технологий, которые широко не используются, за исключением тестирования, может оказаться плохим выбором.

Если на самом деле вам нужны манипуляции с HTML, и вам не нужно использовать Javascript, но вы больше задумываетесь над множеством таких инструментов, доступных в JS, то я бы посмотрел на инструменты C #, разработанные для этой цели. НапримерHTML Agility Pack или мой собственный проект CsQuery, который является портом C # jQuery.

Если вы в основном пытаетесь взять какой-то код, написанный для клиента, но запустить его на сервере - например, для сложного / ускоренного поиска в Интернете - я бы искал вокруг, используя эти термины. Напримерэтот вопро обсуждает это с ответами, включая PhantomJS, стек браузера без головы, а также некоторые инструменты тестирования, о которых я уже упоминал. Для веб-скребков, я думаю, вы можете жить без всего этого в .NET, и в любом случае это может быть единственным разумным ответом.

Может ли CsQuery выступать в качестве DOM для юрского периода (с небольшим слоем обертки)? mcintyre321
еализация DOM в @ CsQuery сильно отличается от реализации в браузере, потому что C # - строго типизированный язык, а javascript - нет. Для этой цели было бы намного проще просто использовать jsdom, который уже написан на javascript - теоретически он должен работать как есть в юрском периоде, хотя я не знаю, пробовал ли кто-нибудь раньше. (На самом деле я начал заимствовать юнит-тесты у jsdom для CsQuery). Jamie Treworgy
Я смотрел на это - есть пара вещей, которые вам нужны, которых нет в юрском периоде, но есть еще один проект под названием jurascript, в котором есть нужные биты и бобы. Jurassic.codeplex.com / обсуждения / 360450 mcintyre321
Я действительно надеюсь, что у кого-то есть время и энергия, чтобы все это увидеть. Я люблю юрский период и использовал бы его во всех проектах, если бы у него просто были удалены неровные края ... он должен быть в основе безголового браузера .NET! Но я не совсем смог заставить его работать в моих ситуациях, и отсутствие способности сохранять и загружать скомпилированные DLL разочаровывает и делает его слишком медленным для многих применений. (Я знаю, что кто-то еще работал над этим, но я так и не смог заставить его работать в моей ситуации). У меня просто слишком много других проектов, над которыми я работаю, и V8 + обертка работает (если страшно). Jamie Treworgy
мы должны настроить кикстартер mcintyre321

Похожие вопросы