无法获取 Web 浏览器文档的元素
Can't get element of web browser document
我正在从 WinForms 应用程序中进行一些网页抓取。这是我要从中抓取的浏览器文档的片段:
<div class="div1" id="id1" data-on-choice="asdf">
<h4>Target:</h4>
<table class="table1" style="width: 100%;">
<tbody><tr>
<td>
<div class="div2">
<label>aa</label>
<label>ab</label>
<label>ac</label>
</div>
<div class="div3" id="id2">
<span class="span1" role="status" aria-live="polite"></span>
</div>
<a class="anchor1" style="display: inline;" href="#"></a>
</td>
</tr>
<tr>
<td>
<div class="div4">
<span></span>
<span></span>
<span></span>
</div>
</td>
</tr>
</tbody></table>
我想要获取并单击的 Html 元素将是锚点 "anchor1"。请注意,我已经做过很多次类似的事情,但我似乎无法获得这个特定的元素。即使当我打印文档的所有锚元素的 InnerHtml 时,也没有一行用于此元素。
Html-Agility-Pack 不是一个选项,因为我的应用程序太大而无法重新编码。 html 不在我的控制之下,因此将 id 分配给元素,...也不是一个选项。
我认为这应该可以解决问题,但它不起作用:
HtmlElement elementToClick = browser.Document.GetElementsByTagName("a")
.Cast<HtmlElement>()
.FirstOrDefault(m => m.GetAttribute("class") == "anchor1");
elementToClick.InvokeMember("click");
因为 class 是一个特殊的名称,所以 return 不是它的值。您应该改用 className。下面的片段对我有用:
var elementToClick = browser.Document
.GetElementsByTagName("a")
.Cast<HtmlElement>()
.FirstOrDefault(m => m.GetAttribute("className") == "anchor1");
您可以通过调用 javascript 来调用所需的 a 标记:
browser.InvokeScript("document.querySelector('a.anchor1').click()");
您调用的脚本将 运行 在您的网络浏览器控件上加载的网络文档上。
有关 InvokeScript 的更多信息,请参阅
WebBrowser.InvokeScript Method
我正在从 WinForms 应用程序中进行一些网页抓取。这是我要从中抓取的浏览器文档的片段:
<div class="div1" id="id1" data-on-choice="asdf">
<h4>Target:</h4>
<table class="table1" style="width: 100%;">
<tbody><tr>
<td>
<div class="div2">
<label>aa</label>
<label>ab</label>
<label>ac</label>
</div>
<div class="div3" id="id2">
<span class="span1" role="status" aria-live="polite"></span>
</div>
<a class="anchor1" style="display: inline;" href="#"></a>
</td>
</tr>
<tr>
<td>
<div class="div4">
<span></span>
<span></span>
<span></span>
</div>
</td>
</tr>
</tbody></table>
我想要获取并单击的 Html 元素将是锚点 "anchor1"。请注意,我已经做过很多次类似的事情,但我似乎无法获得这个特定的元素。即使当我打印文档的所有锚元素的 InnerHtml 时,也没有一行用于此元素。
Html-Agility-Pack 不是一个选项,因为我的应用程序太大而无法重新编码。 html 不在我的控制之下,因此将 id 分配给元素,...也不是一个选项。
我认为这应该可以解决问题,但它不起作用:
HtmlElement elementToClick = browser.Document.GetElementsByTagName("a")
.Cast<HtmlElement>()
.FirstOrDefault(m => m.GetAttribute("class") == "anchor1");
elementToClick.InvokeMember("click");
因为 class 是一个特殊的名称,所以 return 不是它的值。您应该改用 className。下面的片段对我有用:
var elementToClick = browser.Document
.GetElementsByTagName("a")
.Cast<HtmlElement>()
.FirstOrDefault(m => m.GetAttribute("className") == "anchor1");
您可以通过调用 javascript 来调用所需的 a 标记:
browser.InvokeScript("document.querySelector('a.anchor1').click()");
您调用的脚本将 运行 在您的网络浏览器控件上加载的网络文档上。
有关 InvokeScript 的更多信息,请参阅 WebBrowser.InvokeScript Method