0

我正在开发一个 Windows 服务,该服务使用 Internet Explorer 上的不同代理从 csv 文件加载页面并对其进行截图。

我遇到的问题(除了我不能删除 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

0

服务中运行的后台自动化不支持使用 Internet Explorer。得知它明确拒绝在此配置中可见时,我不会感到惊讶。

目前尚不清楚您为什么删除 index.dat,但不,您永远无法这样做,也不应该这样做。如果你想清除浏览器的缓存,可以使用 WinINET APIs。

于 2013-07-08T19:49:45.723 回答