0

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;

}

4

1 に答える 1