获得在selenium打开镀铬窗口的句柄

时间:2017-12-13 09:31:08

标签: c# selenium-webdriver

有人在selenium c#中有任何scipt, 而不是这一行: IWebDriver driver = new ChromeDriver();

初始化驱动程序而不打开新的chrome窗口, 我的意思是,在第二轮中,我将处理我在硒运行中打开的铬。

感谢

2 个答案:

答案 0 :(得分:0)

您可以致电x.Driver以获取相同的驱动程序实例。

    private static IWebDriver driver;
    public IWebDriver Driver {
        get {
            if (driver == null)
            {
                driver = new ChromeDriver();
            }
            return driver;
        }
    }

答案 1 :(得分:0)

这是我使用的方法。 Chrome允许您提供自己的用户定义的命令行参数。因此,您可以在当前正在运行的程序的PID(Windows进程ID)中添加一个名为“ scriptpid-”的参数。 ChromeDriver在命令行中将参数传递给Chrome。然后使用Windows WMI调用从正在运行的Chrome的命令行中检索此PID ...

using System.Management;

public static IntPtr CurrentBrowserHwnd = IntPtr.Zero;
public static int CurrentBrowserPID = -1;
        
ChromeOptions options = new ChromeOptions();
options.AddArgument("scriptpid-" + System.Diagnostics.Process.GetCurrentProcess().Id);
IWebDriver driver = new ChromeDriver(options);

// Get the PID and HWND details for a chrome browser

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("chrome");
for (int p = 0; p < processes.Length; p++)
{
    ManagementObjectSearcher commandLineSearcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + processes[p].Id);
    String commandLine = "";
    foreach (ManagementObject commandLineObject in commandLineSearcher.Get())
    {
        commandLine += (String)commandLineObject["CommandLine"];
    }

    String script_pid_str = (new Regex("--scriptpid-(.+?) ")).Match(commandLine).Groups[1].Value;

    if (!script_pid_str.Equals("") && Convert.ToInt32(script_pid_str).Equals(System.Diagnostics.Process.GetCurrentProcess().Id))
    {
        CurrentBrowserPID = processes[p].Id;
        CurrentBrowserHwnd = processes[p].MainWindowHandle;
        break;
    }
}

CurrentBrowserHwnd 应该包含您的Chrome窗口的HWND。

CurrentBrowserPID 应该包含您的Chrome窗口的进程ID。