在WPF中读取Web浏览器的内容

4

大家好,我希望能够从网站上读取外部内容,比如标签之间的元素。我正在使用Web浏览器控件,并且以下是我的代码。然而,这段代码只是在我的Web浏览器控件中填充了网页。

public MainWindow()
{
    InitializeComponent();

    wbMain.Navigate(new Uri("http://www.annonymous.com", UriKind.RelativeOrAbsolute));
}

你尝试过什么吗? - Clemens
我尝试了WebBrowser的InspectHTML内容,但没有成功... - user1528573
请参考以下的SO问题:https://dev59.com/JHI-5IYBdhLWcg3wCz3y - ZanderAdam
请查看此答案 - Clemens
3个回答

4
你可以使用Html Agility Pack库来解析任何HTML格式的数据。
HtmlDocument doc = new HtmlDocument();
doc.Load(wbMain.DocumentText);

var nodes = doc.SelectNodes("//a[@href"]);

注意: 方法SelectNode接受XPath,而不是CSS或jQuery选择器。
var node = doc.SelectNodes("id('my_element_id')");

每当我尝试访问Node时,都会出现异常“表达式必须评估为节点集。” - user1528573
变量 nodes = doc.DocumentNode.SelectNodes("#text"); - user1528573
1
好的,你需要使用XPath作为选择器,而不是CSS或jQuery选择器。例如,如果你的DIV有id="text",那么你会使用doc.DocumentNode.SelectNodes("//div[@id[starts-with(.,'text')");。我已经更新了我的答案。 - Tomislav Markovski

4

据我理解,从您的问题中可以得知,您只需要解析HTML数据,无需显示实际的网页。 如果是这种情况,您可以采用非常简单的方法,使用HttpWebRequest:

    var _plainText = string.Empty;
    var _request = (HttpWebRequest)WebRequest.Create("http://www.google.com");
    _request.Timeout = 5000;
    _request.Method = "GET";
    _request.ContentType = "text/plain";
    using (var _webResponse = (HttpWebResponse)_request.GetResponse())
    {
        var _webResponseStatus = _webResponse.StatusCode;
        var _stream = _webResponse.GetResponseStream();
        using (var _streamReader = new StreamReader(_stream))
        {
            _plainText = _streamReader.ReadToEnd();
        }
    }

2

试试这个:

dynamic doc = wbMain.Document;
var htmlText = doc.documentElement.InnerHtml;

edit: Taken from here.


3
以下是翻译的结果: 请参考这个答案,它可能对本问题的提问者有所帮助。请尽量遵循现有答案的内容进行翻译,让翻译更通俗易懂,但不要改变原意。 - Clemens
@Clemens 感谢您的提醒。我不是新来的,但是刚开始尝试做出贡献。 - Darajan
@Tomislav Markowski每当我尝试访问节点时,都会出现异常表达式必须评估为节点集。您能告诉我如何使用节点的示例吗? - user1528573

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接