3

如何使用WebBrowser()asp.net 代码隐藏页面中的控件获取另一个网站的源代码。

到目前为止,我有这个但没有任何选项来导航或设置 cookie 或获取页面加载源?你能帮忙吗?

Imports System.Windows.Forms


Partial Class _Default
    Inherits System.Web.UI.Page

    Dim a As WebBrowser = New WebBrowser()
    webBrowser1.Navigate("http://www.google.com")
    'get the source

End Class

我得到这个错误

无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”,因为当前线程不在单线程单元中。

4

3 回答 3

3

这将完美地工作

我们需要添加带有线程的网络浏览器,否则我们将无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”,因为当前线程不在单线程单元中。错误

这是我们可以让 webbrowser 在 asp.net 网页中工作的方式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Threading;
using System.Windows.Forms;

/// <summary>
/// Summary description for CustomBrowser
/// </summary>
public class CustomBrowser
{
    public CustomBrowser()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    protected string _url;
    string html = "";
    public string GetWebpage(string url)
    {
        _url = url;
        // WebBrowser is an ActiveX control that must be run in a
        // single-threaded apartment so create a thread to create the
        // control and generate the thumbnail
        Thread thread = new Thread(new ThreadStart(GetWebPageWorker));
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
        thread.Join();
        string s = html;
        return s;
    }

    protected void GetWebPageWorker()
    {
        using (WebBrowser browser = new WebBrowser())
        {
            //  browser.ClientSize = new Size(_width, _height);
            browser.ScrollBarsEnabled = false;
            browser.ScriptErrorsSuppressed = true;
            browser.Navigate(_url);

            // Wait for control to load page
            while (browser.ReadyState != WebBrowserReadyState.Complete)
                Application.DoEvents();

            html = browser.DocumentText;

        }
    }

}

在网页中

CustomBrowser browser = new CustomBrowser();
string s = browser.GetWebpage("http://localhost:8781/WebSite3/Default3.aspx");
Response.Write(s);
于 2013-07-04T14:03:35.347 回答
1

您希望在 ASP.NET 中做的事情有点不正统,但这里有一个可能对您有所帮助的示例:

http://www.codeproject.com/Articles/50544/Using-the-WebBrowser-Control-in-ASP-NET

于 2012-08-30T17:56:05.680 回答
0

当我在 asp.net 页面中使用 webBrowser 对象时,我发现了同样的错误。
但在我找到解决方案后,

https://stackoverflow.com/a/1054408/900284

现在好了。

于 2013-01-08T04:23:30.163 回答