【问题标题】:c# fail to get element in content page with getelementbyid, getelementsbytagnamec#使用getelementbyid,getelementsbytagname无法获取内容页面中的元素
【发布时间】:2018-07-16 21:19:38
【问题描述】:

我已经发布了同样的问题,但由于我还没有得到该帖子的任何答案,所以我再次发布它。

我正在尝试使用 winforms 从网站的内容页面中获取一些信息(例如 tagName、id 使用GetElementsByTagName 方法或GetElementById 方法)。

如您所见,无论您做出何种选择(select1select2select3 等),网址都保持不变。但是,这些选项下的内容在内容页面中有所不同。

我正在尝试从其中一个访问 tagName(或 id)(不是选择,而是特定选择下的内容)。

我已经调试并发现(或看起来)我无法从特定选择下的任何内容中访问 tagName(或 id)。

似乎我只能从主页访问 tagName(或 id)。图3有助于更好地解释一些术语,如主页、内容页。

我试图详细解释,如果我的问题仍然不清楚,请告诉我。 我的代码如下所示。

var countGetFile = webBrowser1.Document.GetElementsByTagName("IFRAME");
foreach (HtmlElement l in countGetFile)
{
    if (l.GetAttribute("width").Equals("100%"))
    {
        MessageBox.Show(l.GetAttribute("height").ToString());
        MessageBox.Show(l.GetAttribute("outerText").ToString());
    }
}

【问题讨论】:

标签: c# html winforms


【解决方案1】:

我无法从 html 中获取 #document 的 2 层以下的信息。

html 看起来像

...
    <src="..." id="A" ... >
    #document
        ...
        <src="..." id="B" ... >
        #document
            ...
            <span="C" ...>
            ...

我可以使用看起来像

的代码来获取跨度信息(第三个大括号)
HtmlWindow frame1 = webBrowser1.Document.GetElementById("A").Document.Window.Frames["A"];

HtmlWindow frame2 = frame1.Document.GetElementById("B").Document.Window.Frames["B"];


foreach (HtmlElement elm in frame2.Document.All)
{
    if (elm.GetAttribute("tagName").Equals("C"))
    {
        // your command             
    }
}

要使用 Document.Window.Frames,您需要使用“System.Collections”的标题;

顺便说一句,有问题。当我尝试访问第三个大括号中的信息时,我需要在frame1frame2 之间做一些工作,例如延迟frame2 以便有足够的时间在@ 之后访问下一个级别987654326@.

我想出了一种破解方法。放置一个消息框以进行短时间延迟弹出,或者放置一个带有异步代码的延迟功能(不是冻结),

async Task PutTaskDelay()
{
    await Task.Delay(5000);//5 secs
}

我刚刚找到了访问二级的临时解决方案。我会感谢任何知道一些方法来解决这个问题的人。

【讨论】:

  • 您可能不需要“System.Collections”来使用 Document.Window.Frames
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多