zoukankan      html  css  js  c++  java
  • 当前线程不在单线程单元中,因此无法实例化 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;
    }

  • 相关阅读:
    Redis安装测试
    linux 查看磁盘空间大小
    冷备份与热备份、双机热备与容错
    IDEA在编辑时提示could not autowire
    IntelliJ IDEA 快捷键和设置
    POI实现EXCEL单元格合并及边框样式
    metaq架构原理
    二叉树
    开启“树”之旅
    巧妙的邻接表(数组实现)
  • 原文地址:https://www.cnblogs.com/soundcode/p/10520260.html
Copyright © 2011-2022 走看看