private static PhantomJSDriverService GetPhantomJSDriverService()
{
PhantomJSDriverService pds = PhantomJSDriverService.CreateDefaultService("D:/");//Phantomjs.exe 需要放到指定的路径下面
pds.LoadImages = false;
pds.HideCommandPromptWindow = true;
pds.IgnoreSslErrors = true;
//设置代理服务器地址
//pds.Proxy = $"{ip}:{port}";
//设置代理服务器认证信息
//pds.ProxyAuthentication = GetProxyAuthorization();
return pds;
}
private static void RunTask(Dictionary<string, DataTable> dic)
{
IWebDriver driver = new PhantomJSDriver(GetPhantomJSDriverService());
foreach (var urlTemplate in dic.Keys)
{
DataTable dt = dic[urlTemplate];
int times = 0;
foreach (DataRow dr in dt.Rows)
{
times++;
if (times % 50 == 0)
{
driver.Quit();
driver = new PhantomJSDriver(GetPhantomJSDriverService());
Console.WriteLine("重启浏览器");
}
var url = string.Format(urlTemplate, Dc.ToInt(dr["ID"]));
driver.Navigate().GoToUrl(url);
try
{
Console.WriteLine(driver.Title);
}
catch (Exception ex)
{
Console.WriteLine("遇到异常:" + ex.Message);
driver.Quit();
driver.Dispose();
driver = new PhantomJSDriver(GetPhantomJSDriverService());
}
}
}
if (driver != null)
{
driver.Quit();
}
}
static ConsoleEventDelegate handler; // Keeps it from getting garbage collected
static bool ConsoleEventCallback(int eventType)
{
if (eventType == 2)
{
List<Process> pList = Process.GetProcessesByName("phantomjs").ToList();
pList.ForEach(i => i.Kill());
}
return false;
}
private delegate bool ConsoleEventDelegate(int eventType);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add);