Как получить доступ к модели DOM через автоматизацию пользовательского интерфейса
Я использую UI Automation Framework (https://docs.microsoft.com/en-us/dotnet/framework/ui-automation/ui-automation-overview) напрямую и из библиотеки FlaUI.
Когда я пытаюсь получить доступ к содержимому окна веб-браузера (например, Chrome), я могу получить структуру AutomationElements и получить доступ к элементам веб-страницы из дерева фреймворка. Проблема в том, что доступ к элементам веб-страницы слишком медленный для автоматизации пользовательского интерфейса из-за размера дерева.
Сейчас я использую такой подход:
...
Automation.AddAutomationFocusChangedEventHandler(OnFocusChangedHandler);
...
this._application = FlaUI.Core.Application.Attach(this.ProcessId);
this._automation = new UIA3Automation();
...
private void OnFocusChangedHandler(AutomationElement elementFocused)
{
...
var mainWindow = this._application.GetMainWindow(this._automation, TimeSpan.FromSeconds(5));
var document = this._mainWindow?.FindFirstChild(p =>
p.ByControlType(FlaUI.Core.Definitions.ControlType.Document));
var someElementOnPage = document.FindAllDescendants(cf =>
cf.ByControlType(FlaUI.Core.Definitions.ControlType.ListItem).And(cf.ByName("SomeName")));
// here I have about 40-50 seconds running query
}
Есть ли какой-нибудь правильный способ доступа к содержимому веб-страницы из настольного приложения?
Ограничения: мне нужно получить доступ к экземпляру браузера, открытому пользователем, и я не могу изменять настройки браузера и сети.