从Chrome网络浏览器获取网址

时间:2014-03-12 08:17:16

标签: c# google-chrome url browser web

我正在尝试使用C#从Chrome网页浏览器33版获取网址。我已经看过并尝试了不同的建议 - 但到目前为止还没有运气。

我尝试过的事情: AutomationElement - > Getting the current tab's URL from Google Chrome using C# "地址和搜索栏"在33版Chrome网络浏览器中使用自动化无法找到元素。 我也尝试过使用TreeWalker,这些是我找到的唯一元素:

横向滚动条

少量退货

少量转发

垂直滚动条

少量退货

少量转发

"网页标题......"

系统菜单栏

系统

最小化

恢复

关闭

NDde - > Retrieve current URL from C# windows forms application

NDde.Client.DdeClient dde = new NDde.Client.DdeClient("Chrome", "WWW_GetWindowInfo");
dde.Connect();

NDde.Client.DdeClient dde = new NDde.Client.DdeClient("Chrome", "Chrome_OmniboxView");
dde.Connect();

两者都无效......无法连接。

FindWindowEx - >

 [DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);

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

    IntPtr urlHandle = FindWindowEx(handle, IntPtr.Zero, null, "Address and search bar");
    if (urlHandle != IntPtr.Zero)
    {
        Console.WriteLine("yes!");
    }
    return "";
}

不能......

我走了多远

所以我使用了UI Spy并检查以查找Chrome 33中的多功能框的名称。 在UI间谍中根本无法找到它,但是在检查中我找到了"地址和搜索栏",它具有我追求的网址值...问题是我如何获得持有那个网址信息?

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

AutomationElement 链接不确定自动化路线在Chrome 33中无效的原因;我在Chrome 35中实现了它,它确实可以正常工作。一定要使用第一个实现,据说需要350毫秒才能找到URL。此外,我发现使用 TreeScope.Subtree 而不是 TreeScope.Descendants 似乎工作得更快,尽管我还没有进行定时测试或其他任何事情。

答案 1 :(得分:-1)

您是否尝试过使用API​​?

getURL - string chrome.runtime.getURL(string path)

以下是源代码的链接:Link to API