Получение доступа к элементам контента в браузере (IE,FF)

Тема в разделе "WASM.WIN32", создана пользователем LittleJohn, 11 янв 2010.

  1. LittleJohn

    LittleJohn New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2010
    Сообщения:
    5
    Возникло непреодолимое желание получить доступ к отдельным элементам контента в браузере (для простоты берем массовые IE7,8 и FF3). Цель - возможность поиска нужного текста на уже загруженной странице и его изменение.

    С помощью UiSpy установлено, что каждый отдельный блок загруженного контента в этих браузерах представлены в виде отдельных контролов, например html код "Привет, <h1>Вася</h1>" образует два контрола ControlType.Text - "Привет, " и "Вася". Для картинок и таблиц тип контролов другой, но общий смысл тот же.

    Вопрос в том, как получить к ним доступ, чтобы хотя бы просто прочитать текст.
    Казалось бы задача тривиальная, берем главное окно, от него EnumChildWindows, getWindowText или аналог на нужном элементе и все, но... последним доступным окном в иерархии на пути к нашим контролам является общее окно с именем класса MozillaWindowClass для FF3 и Internet Explorer_Server для IE8, а дальше, в "глубину", по мнению Spy++, UiSpy и просто GetWindow c GW_HWNDFIRST, окон вроде как и нет!

    UiSpy для IE7,8 и FF показывает, что элементы в иерархии есть, но у них нет ни имени класса, ни оконного хэндла.
    (Для Opera и Chrome еще хуже, там просмотр иерархии элементов вообще останавливается на общем окне.)

    Можно ли как-то взаимодействовать с этими отдельными элементами? Чувствую, что есть какой-то простой универсальный способ, но пока не могу найти.

    Использовать путь через подключение тулбаров и расширений не хотелось бы, перехватывать данные до входа в браузер тоже не выход, т.к. там может и https быть и джаваскрипт закриптованый, а хотелось бы иметь возможность работать с тем, что уже отрендерил браузер.
     
  2. Gnil

    Gnil New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    41
    Универсального способа нет и не может быть, т.к. контролы в современных приложениях не являются окнами windows.
    Для конкретных браузеров есть свои способы, например, плагины.
    Для IE можно обойтись без BHO: http://www.rsdn.ru/article/qna/inet/enumexp.xml (UiSpy умеет использовать Automation, потому ты видишь контролы в IE)
     
  3. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Gnil
    Для браузеров, как оказалось, есть.

    LittleJohn
    Я недавно задавал подобный вопрос http://wasm.ru/forum/viewtopic.php?id=35408
    Приемлимым вариантом оказалась работа с интерфейсом IAccessible.
     
  4. 008888

    008888 New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2008
    Сообщения:
    17
    COM для IE достаточно в MSDN все нормально написано, погляди еще тему на Codeproject мне помогло (кстате есть либа которая реализует окно IE на чистом COM, без всяких MFC и ATL, что мне очень пригодилось)
    Для FF - XCOM поидее, только работать с ним непонятно как, можешь посмотреть либу на kirix.com , вернее ее исходники, там работа с xulrunner, считай с фоксом карманным.
     
  5. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    ммм.. ссылочку бы еще..
     
  6. 008888

    008888 New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2008
    Сообщения:
    17
    HTMLWindow by René Nyffenegger http://www.adp-gmbh.ch/win/misc/mshtml/index.html
     
  7. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    http://wasm.ru/forum/viewtopic.php?pid=358088#p358088
     
  8. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    008888
    GoldFinch
    Очень спасибо! Надо почаще в прожект заходить..
     
  9. LittleJohn

    LittleJohn New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2010
    Сообщения:
    5
    Aspire
    Спасибо за ссылку на тему, IAccessible то, что нужно :)
     
  10. LittleJohn

    LittleJohn New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2010
    Сообщения:
    5
    Покрутил доступ через IAccessible, для чтения элементов отличная вещь, можно через дерево иерархии нужные контролы перебрать, можно по конкретным координатам выдернуть элемент. Работает для IE7,8 и для FireFox3.

    А вот с доступом на запись хуже, изменять можно только параметр Value и только для элементов ввода, т.е. записать свой текст просто куда-нибудь в середину абзаца или поменять url для ссылки уже не получается.
    От наличия администраторского доступа это не зависит, от того, свое окно или чужое, тоже.

    Как все-таки можно добратся до редактирования в полном объеме? А то получается какое-то "смотреть можешь что угодно, а целовать только в щёчку". Не комильфо, вобщем :)