Доступ к IE Dom вне процесса в C # - PullRequest
0 голосов
/ 10 марта 2011

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

Я надеюсь, что мне не придется писать bho для доступа к данным и обмена ими через wcf. Я видел несколько примеров получения данных с помощью c ++ и msaa server, но это не очень помогает мне в получении, так как я бы предпочел не использовать помощник C ++, поскольку я не использовал c ++ годами.

ТИА.

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

В зависимости от того, сколько вещей вам нужно сделать, вы можете рассмотреть возможность использования чего-то простого, например WatiN . Это отличный инструмент для создания экземпляра браузера и обхода дерева. Работа с DOM довольно проста и хорошо документирована (с множеством примеров в Интернете).

1 голос
/ 10 марта 2011

Если вы выполняете только очистку и запросы, вам, вероятно, лучше всего использовать объект WebRequest, который поставляется с .NET для вашей работы.

Класс WebRequest @ MSDN

Однако, если вам нужен точный доступ к тому, что представлено в IE DOM, вы должны использовать Microsoft Active Accessibility для получения доступа. При условии, что вы можете идентифицировать дескриптор окна или надежное местоположение для целевого окна IE, и это видно в сеансе пользователя, Active Accessibility - лучший способ получить доступ к целевому окну IE и копаться в DOM. Не обязательно использовать C ++, но, вероятно, будет проще сделать это в C ++.

Службы пользовательского интерфейса Active Accessibility @ MSDN

Вы захотите использовать EnumChildWindows для определения местоположения (или запроса методом грубой силы) окна DOM либо с рабочего стола, либо с помощью дескриптора окна фрейма, полученного из процессов перечисления. В .NET перечисление процессов доступно из класса System.Process.

EnumChildWindows @ MSDN

EnumWindows signature @ pinvoke.net
EnumChildWindows signature @ pinvoke.net

Process.GetProcesses () @ MSDN
Process.MainWindowHandle @ MSDN

Чтобы добавить объявления типов, вам нужно иметь возможность обходить DOM в C # и общаться с MSAA, добавить ссылку COM в «Библиотеку объектов Microsoft HTML» в свой проект и добавить сигнатуры P / Invoke для MSAA.

AccessibleObjectFromWindow Signature @ pinvoke.net

Как только вы сможете вызвать MSAA, получите IDispatch через Active Accessibility из дескриптора окна. Вы захотите отправить OBJID_NATIVEOM, что даст вам IDispatch, который вы можете опросить.

Получение объекта IAccessible @ MSDN
AccessibleObjectFromWindow () @ MSDN

Отсюда IDispatch может быть приведен к IHTMLWindow2 или IHTMLDocument2 (и производным), который имеет все методы модели сценария DOM и другие. К сожалению, я не могу вспомнить, какой из них возвращается с помощью этого метода, но в любом случае IHTMLWindow2 имеет свойство document (аналогично window.document в скрипте). Любой из них может быть разрешен для предоставления доступа к DOM, который представлен IHTMLDocument2 и всеми производными интерфейсами.

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