当前线程不在单线程单元中,因此无法实例化 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;
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值