Загрузите DOM и выполните javascript на стороне сервера с помощью.Net
Я хотел бы загрузить DOM, используя документ (в виде строки) или URL-адрес, а затем выполнить функции JavaScript (включая селекторы JQuery) против него. Это будет полностью на стороне сервера, в процессе, без клиента / браузера.
По сути, мне нужно загрузить dom, а затем использовать селекторы jquery и функции text() и type val() для извлечения из него строк. Мне не нужно манипулировать домом.
Я смотрел на движки.Net javascript, такие как Jurassic и Jint, но не поддерживает загрузку DOM и поэтому не может делать то, что мне нужно.
Я хотел бы рассмотреть не.Net-решения (node.js, ruby и т. Д.), Если они существуют, но действительно предпочел бы.Net.
Ниже приведен хороший ответ, но в настоящее время я пробую другой маршрут, я пытаюсь перенести envjs на юрский период. Если я смогу получить эту работу, я думаю, что она будет делать то, что я хочу, следите за обновлениями....
1 ответ
Ответ зависит от того, что вы пытаетесь сделать. Если вашей целью является в основном полная имитация веб-браузера или "безголовый браузер", есть ряд решений, но ни одно из них (о которых я знаю) не существует в.NET. Чтобы имитировать браузер, вам нужен движок JavaScript и DOM. Вы определили несколько двигателей; Я обнаружил, что юрский период - самый крепкий и быстрый. Движок Google Chrome V8 также очень популярен; проект Neosis Javascript.NET предоставляет для него оболочку.NET. Это не совсем чистый.NET, так как у вас есть зависимость не от.NET, но он интегрируется чисто и не вызывает особых проблем.
Но, как вы заметили, вам все еще нужна DOM. В чистом C# есть XBrowser, но он выглядит немного устаревшим. Есть также основанные на javascript представления всего DOM браузера, такие как jsdom. Вы, вероятно, могли бы запустить jsdom в Jurassic, предоставив вам DOM-симуляцию без браузера, и все это на C# (хотя, вероятно, очень медленно!). В V8 он определенно будет работать нормально. Если вы выходите за пределы области.NET, есть другие, более поддерживаемые решения. Этот вопрос обсуждает HtmlUnit. Тогда есть Selenium для автоматизации реальных веб-браузеров.
Также имейте в виду, что большая часть работы над этими инструментами предназначена для тестирования. Хотя это не означает, что вы не можете использовать их для чего-то другого, они могут не работать или не интегрироваться хорошо для какого-либо стабильного использования во встроенном производственном коде. Если вы пытаетесь в основном выполнять HTML-манипуляции в реальном времени, то решение, сочетающее в себе множество технологий, которые широко не используются, за исключением тестирования, может оказаться плохим выбором.
Если на самом деле вам нужны манипуляции с HTML, и вам не нужно использовать Javascript, но вы больше задумываетесь о богатстве таких инструментов, доступных в JS, то я бы посмотрел на инструменты C#, разработанные для этой цели. Например, HTML Agility Pack или мой собственный проект CsQuery, который является портом C# jQuery.
Если вы в основном пытаетесь взять какой-то код, написанный для клиента, но запустить его на сервере - например, для сложного / ускоренного просмотра веб-страниц - я бы искал эти термины. Например, этот вопрос обсуждает это с ответами, включая PhantomJS, стек обозревателя webkit без головы, а также некоторые инструменты тестирования, которые я уже упоминал. Что касается очистки веб-страниц, я полагаю, что вы можете жить без всего этого в.NET, и в любом случае это может быть единственным разумным ответом.