我正在尝试使用自动化方法来获取活动标签的URL,但问题是响应时间太长。
我的编步想法是,每次用户在chrome上时,每次按下按键都会获得url选项卡,但似乎chrome在获取3秒钟的url时挂起了
屏幕:
我的功能:
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选项卡转储到文件或数据库中,从而使用户可以轻松使用扩展名,或者可以使用一种解决方案来提高自动化速度。