1.下载webdriver.dll+webdriver.support.dll的3.2版本+ chromedriver.exe的2.33版本懒人包
2.新增console专案,把step1的dll都加入参考,System.Management也加入参考,然后把ChromeDriver资料夹复制到应用程式的bin\Debug路径下
3.贴上以下程式码,专案名称改成当下自己的:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.PhantomJS;
using OpenQA.Selenium.Remote;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading;
namespace ESportDataCollector
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("start...");
//每次執行前先刪除之前掛掉沒在用的chrome, chromedriver的process
KillUncontrollerBrowser();
IWebDriver driver;
//隱藏chromedriver.exe視窗
ChromeOptions chromeBrowserOptions = new ChromeOptions();
var driverService = ChromeDriverService.CreateDefaultService(@"ChromeDriver");
driverService.HideCommandPromptWindow = true;
//chrome有時候容易因為sandbox的封裝環境導致掛點,因此要no-sandbox
//headless可以隱藏chrome(chromedriver.exe版本需2.29以上)
chromeBrowserOptions.AddArguments(new List<string>() { "no-sandbox", "headless", "disable-gpu", "window-size=1904x1500" });
driver = new ChromeDriver(driverService, chromeBrowserOptions);
driver.Navigate().GoToUrl("https://tw.yahoo.com");
Thread.Sleep(30000);
}
#region 自訂函數
public static void KillUncontrollerBrowser()
{
string str = "chrome";
foreach (var item in str.Split(';'))
{
KillUncontrollerProcess(item);
}
}
/// <summary>
/// kill有 ParentID 的process
/// </summary>
/// <param name="ProcessName">傳入要檢查的exe名稱(ex: firefox,chrome,phantomjs)</param>
private static void KillUncontrollerProcess(string ProcessName)
{
Process[] ProcList = Process.GetProcessesByName(ProcessName);
foreach (Process proc in ProcList)
{
try
{
ManagementObject managementObject = new ManagementObject(string.Format("win32_process.handle='{0}'", proc.Id));
managementObject.Get();
int parentId = Convert.ToInt32(managementObject["ParentProcessId"]);
try
{
if(parentId == 0)
{
continue;
}
Process parentProc = Process.GetProcessById(parentId);
if (parentProc.ProcessName == "chromedriver")
{
//先刪除此process的parent process
parentProc.Kill();
//再刪除自己
proc.Kill();
}
}
catch
{
continue;
}
}
catch
{
continue;
}
}
}
#endregion
}
}
完了