更换UI自动化以获取Chrome ActiveTab网址

时间:2018-08-30 16:18:50

标签: c# winforms

我正在尝试使用自动化方法来获取活动标签的URL,但问题是响应时间太长。

我的编步想法是,每次用户在chrome上时,每次按下按键都会获得url选项卡,但似乎chrome在获取3秒钟的url时挂起了

屏幕:

enter image description here

我的功能:

public static Task<string> getChromeUrl(int ID)
    {
        Process chrome = Process.GetProcessById(ID);


            // Console.WriteLine(chrome.Id);
            // the chrome process must have a window
            if (chrome.MainWindowHandle == IntPtr.Zero)
            {
            return null;
            }

            // 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)
            {
            Console.WriteLine("getChromeUrl" + DateTime.Now);
            AutomationPattern[] patterns = elmUrlBar.GetSupportedPatterns();

                if (patterns.Length > 0)
                {
                    ValuePattern val =
                    (ValuePattern)elmUrlBar.GetCurrentPattern(patterns[0]);
                    return Task.FromResult(val.Current.Value);
                }
            }
            else
            {
            //Console.WriteLine("getChromeUrl" + DateTime.Now);

            elmUrlBar = elm.FindFirst(TreeScope.Descendants,
               new PropertyCondition(AutomationElement.NameProperty, "Barre d'adresse et de recherche"));
           // Console.WriteLine("getChromeUrl" + DateTime.Now);
            if (elmUrlBar != null)
                {

                    AutomationPattern[] patterns = elmUrlBar.GetSupportedPatterns();
                    if (patterns.Length > 0)
                    {
                        ValuePattern val =
                        (ValuePattern)elmUrlBar.GetCurrentPattern(patterns[0]);
                        return Task.FromResult(val.Current.Value);
                    }
                }

            }


        return null;
    }

我试图通过其 ProcessID 来获取该标签,这虽然相差了 1s ,但仍然太多了。

我所做的是创建一个chrome扩展名,以定期(每2s)从活动选项卡中复制url,但是在该扩展名运行时,用户将无法复制/粘贴任何内容(我不是很好)使用javascript)。

我的问题:有没有一种方法可以将url选项卡转储到文件或数据库中,从而使用户可以轻松使用扩展名,或者可以使用一种解决方案来提高自动化速度。

0 个答案:

没有答案