• 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96“


    在做采集时,有些网页因服务器限制用webclient或者webrequest不能获取html,这时我们可以用webbrowser的方法来绕过对方服务器的限制,但是在实例化webbrowser 的时候发现会报上面的错误,查了一些资料,最终写出下面的代码,能实现功能,不过可以再优化,留待以后有空的时候研究一下,下面是实现代码:

    private static string htmlstr;
    private static void GetHtmlWithBrowser(object url)
    {
    htmlstr = string.Empty;

    WebBrowser wb = new WebBrowser();
    wb.AllowNavigation = true;
    wb.Url = new Uri(url.ToString());
    DateTime dtime = DateTime.Now;
    double timespan = 0;
    while (timespan < 10 || wb.ReadyState != WebBrowserReadyState.Complete)
    {
    Application.DoEvents();
    DateTime time2 = DateTime.Now;
    timespan = (time2 - dtime).TotalSeconds;
    }

    if (wb.ReadyState == WebBrowserReadyState.Complete)
    {
    htmlstr = wb.DocumentText;
    }
    }

    /// <summary>
    /// 在单线程中启用浏览器
    /// </summary>
    public static void RunWithSingleThread(object url,ref string html)
    {
    ParameterizedThreadStart ps = new ParameterizedThreadStart(GetHtmlWithBrowser);
    Thread t = new Thread(ps);
    t.IsBackground = true;
    t.ApartmentState = ApartmentState.STA;
    t.Start(url);
    html = htmlstr;
    }

  • 相关阅读:
    Web 服务器配置
    Web 浏览
    C++ Web 编程
    C++ 多线程
    C++ 信号处理
    C++ 预处理器
    C++ 模板
    C++ 命名空间
    C++ 动态内存
    C++ 异常处理
  • 原文地址:https://www.cnblogs.com/soundcode/p/10520260.html
Copyright © 2020-2023  润新知