Internet Explorerでさまざまなプロキシを使用してcsvファイルからページをロードし、そのスクリーンショットを撮るWindowsサービスに取り組んでいます。
私が抱えている問題 (index.dat を削除できないことに加えて、それは別の話です) は、Internet Explorer を表示 (IE.Visible = true) したいときに、機能しないことです。助言がありますか?
これがコードの一部です。「WriteLog」関数は、リリース バージョンを実行するときに何が起こっているか (マイルストーン) を確認するためのものです。
Windows 7、Internet Explorer 9、Visual Studio 2010 を使用。
static void testSite (string url, int rowNum)
{
WebLoaderHelper.WriteLog("TS: Variables");
int width, height, hwnd;
StringBuilder sb = new StringBuilder();
Stopwatch chronometer = new Stopwatch();
//Init Variables
isDocumentComplete = false;
isNavigateError = false;
errorCode = 200;
long result;
InternetExplorer IE = null;
IE = new SHDocVw.InternetExplorer();
Stopwatch stopWatch = new Stopwatch();
string proxy;
proxy = getProxy();
IE.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete);
IE.NavigateError += new DWebBrowserEvents2_NavigateErrorEventHandler(IE_NavigateError);
//Helper.setWindowState(IE.HWND, 2);
WebLoaderHelper.WriteLog("TS: IE VISIBLE");
try
{
IE.Visible = Boolean.Parse(Properties.Settings.Default.IEVisible);
WebLoaderHelper.WriteLog("TS: IE VISIBLE:" + IE.Visible.ToString());
IE.Visible = true;
WebLoaderHelper.WriteLog("TS: IE VISIBLE (true):" + IE.Visible.ToString());
}
catch (Exception e)
{
WebLoaderHelper.WriteLog("TS: IE VISIBLE EXCEPTION:" + e.ToString());
WebLoaderHelper.WriteLog("TS: IE VISIBLE:" + IE.Visible.ToString());
IE.Visible = true;
WebLoaderHelper.WriteLog("TS: IE VISIBLE again:" + IE.Visible.ToString());
}
WebLoaderHelper.WriteLog("TS: Watches");
stopWatch.Start();
chronometer.Start();
WebLoaderHelper.WriteLog("TS: Navigate");
IE.Navigate(url.ToString());
//Log Start DateTime
ResultsDT.Rows[rowNum][0] = DateTime.Now;
WebLoaderHelper.WriteLog("TS: While complete");
while (!isDocumentComplete)
{
if (chronometer.Elapsed.TotalSeconds > 60)
{
sb.AppendLine("Proxy: " + proxy);
sb.AppendLine("site: " + url);
sb.AppendLine("Took: " + chronometer.Elapsed.TotalSeconds.ToString() + "seconds and isn't complete. Breaking while.");
sb.AppendLine();
WebLoaderHelper.WriteLog(sb.ToString());
WebLoaderHelper.WriteEToErrorLog(sb.ToString());
sb = new StringBuilder();
chronometer.Stop();
break;
}
}
//Artificially add half a second, to let all images load
Thread.Sleep(500);
//Take Pic
WebLoaderHelper.WriteLog("TS: Take Pic");
if (IE.Visible)
{
WebLoaderHelper.WriteLog("TS: IE Visible PIC!");
try
{
width = IE.Width;
height = IE.Height;
WebLoaderHelper.getScreenShot(IE.HWND, width, height, proxy, url);
}
catch (Exception e)
{
sb.AppendLine("Proxy: " + proxy);
sb.AppendLine("site: " + url);
sb.AppendLine(e.Message);
sb.AppendLine();
WebLoaderHelper.WriteEToErrorLog(sb.ToString());
WebLoaderHelper.WriteLog("TS: IE VISIBLE PIC but EXCEPTION: " + e.ToString());
}
}
WebLoaderHelper.WriteLog("TS: Stop everything");
IE.Stop();
IE.Quit();
stopWatch.Stop();
result = stopWatch.ElapsedMilliseconds;
try
{
cleanProcessList();
}
catch (Exception)
{
Console.WriteLine("Problem with cleaning process list");
WebLoaderHelper.WriteLog("TS: Problem with cleaning process list");
}
//Log Result
ResultsDT.Rows[rowNum][3] = result;
ResultsDT.Rows[rowNum][4] = errorCode;
}