请记住,我对HTML只知道一点:
有一个网站我正在尝试使用WebBrowser与之交互。该站点具有如下文本区域元素:
<textarea name="ctl00$ContentPlaceHolderMain$txtCallDesc" rows="2" cols="20" id="ctl00_ContentPlaceHolderMain_txtCallDesc" tabindex="205" style="width: 100%; height: 80px; font-size: 8pt"></textarea>根据我所读到的,textarea生成的ID表示它被放置在另一种形式中,我不确定这是否是我遇到问题的地方。
加载页面后,按钮中有如下内容:
Dim theCol As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("textarea")
For Each curElement As HtmlElement In theCol
ListBox1.Items.Add(curElement.TagName)
Next名单上什么都没有。我还尝试使用Chrome的“检查元素”特性收集的文本框的ID:
Dim value As HtmlElement = WebBrowser1.Document.GetElementById("ctl00_ContentPlaceHolderMain_txtCallDesc")
MsgBox(value.GetAttribute("value"))无论我做什么,我似乎都无法让程序认识到文档中有textarea元素。这个页面的源文件太长了,很难给这里的每个人发垃圾邮件,但是有什么是我应该注意的吗?也许需要先获得另一个元素,然后搜索其中的元素?
编辑:
我试图获得的元素似乎在一个iFrame中,但是看起来它来自同一个域,所以相同的来源策略不应该起作用,对吗?
<iframe id="mainFrame" width="100%" height="100%" frameborder="0" class="mainFrame" name="Main" src="/Calls/OpenCalls.aspx">发布于 2014-08-22 19:49:03
使用获取Iframe HTML中显示的代码
For i = 0 To WebBrowser1.Document.Window.Frames.Count - 1
Dim frameDoc = WebBrowser1.Document.Window.Frames(i)
Dim theCol = frameDoc.Document.GetElementsByTagName("textarea")
For Each curElement As HtmlElement In theCol
ListBox1.Items.Add(String.Format("TagName: {0} Id:{1}", curElement.TagName, curElement.Id))
Next
Next关键部分是WebBrowser1.Document.Window.Frames的使用。
发布于 2014-08-22 18:18:45
您不能直接引用iframe中的元素,因为它们位于另一个文档中。因此,首先在iframe中获得对文档元素的引用,然后您可以以同样的方式查询它。
Dim frameDoc = WebBrowser1.Document.GetElementById("mainFrame").DomElement.contentWindow.Document其他你已经知道的..。
Dim theCol = frameDoc.GetElementsByTagName("textarea")
For Each curElement In theCol
ListBox1.Items.Add(curElement.TagName)
Nexthttps://stackoverflow.com/questions/25452549
复制相似问题