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;
    }

  • 相关阅读:
    大数据概述
    语法分析-代码
    语法分析-C语言程序
    Hadoop综合大作业
    hive基本操作与应用
    理解MapReduce计算构架
    熟悉HBase基本操作
    爬虫大作业
    熟悉常用的HDFS操作
    数据结构化与保存
  • 原文地址:https://www.cnblogs.com/soundcode/p/10520260.html
Copyright © 2011-2022 走看看