Получить все открытые URL-адреса вкладок в C # windows forms

#c# #winforms #automationelement

#c# #winforms #automationelement

Вопрос:

Я пытаюсь получить все URL-адреса Google Chrome в Windows forms с помощью c #. В настоящее время я пробовал использовать an AutomationElement , который дает мне только URL-адрес активной вкладки вместо всех открытых вкладок.

Мой код выглядит следующим образом:

 public void GetAllUrls()
{
    Process[] procsChrome = Process.GetProcessesByName("chrome");
    foreach (Process chrome in procsChrome)
    {
        // the chrome process must have a window
        if (chrome.MainWindowHandle == IntPtr.Zero)
        {
            continue;
        }

        // find the automation element
        AutomationElement elm = AutomationElement.FromHandle(chrome.MainWindowHandle);
        AutomationElement elmUrlBar = elm.FindFirst(TreeScope.Descendants,
          new PropertyCondition(AutomationElement.NameProperty, "Address and search bar"));

        // if it can be found, get the value from the URL bar
        if (elmUrlBar != null)
        {
            AutomationPattern[] patterns = elmUrlBar.GetSupportedPatterns();
            if (patterns.Length > 0)
            {
                ValuePattern val = (ValuePattern)elmUrlBar.GetCurrentPattern(patterns[0]);
                Console.WriteLine("Chrome URL found: "    val.Current.Value);
                listBox1.Items.Add(val.Current.Value);
            }
        }
    }
}
  

Комментарии:

1. Все современные веб-браузеры используют API WebDriver для автоматизации. Вы могли бы использовать, например, Selenium для управления браузером и получения всех открытых окон (это то, что вкладки, насколько это касается браузера) WebDriver.GetWindowHandles . Проверьте руководство по Selenium C #: обработка нескольких окон браузера

2. @PanagiotisKanavos , я тоже пробовал с selenium. Я унаследовал IWebDriver для своего класса form. Там после того, как я нашел несколько методов в этом интерфейсе. Есть ли у вас какие-либо предложения, в какой метод мне нужно добавить свою логику?

3. Нет. Вы используете интерфейс IWebDriver, предоставляемый Selenium, вы не наследуете от него. Я уже разместил ссылку на учебное пособие, в котором показано, как использовать Selenium для управления браузером и даже для работы с несколькими вкладками

4. Он запрашивает установку «chromedriver.exe «. Мы не можем быть уверены, что конечные пользователи установят этот драйвер. разве это невозможно без chromedriver?

5. Это не драйвер ОС, это просто программа, предоставляемая поставщиком браузера . Это все равно, что спросить, будут ли ваши клиенты устанавливать вашу программу. Или, если они установят Chrome в первую очередь. Драйверу не нужен установщик, вы можете просто скопировать его в свое приложение. Однако он должен быть совместим с установленной версией браузера