Skip to main content
 首页 » 编程设计

c#之无法获取 Web 浏览器文档的元素

2024年05月06日38unruledboy

我正在从 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> 

我想要获取并单击的 HtmlElement 将是 anchor “anchor1”。请注意,我已经做过很多次类似的事情,但我似乎无法获得这个特定的元素。即使当我打印我文档的所有 anchor 元素的 InnerHtml 时,也没有一行用于此元素。

Html-Agility-Pack 不是一个选项,因为我的应用程序太大而无法重新编码。 html 不在我的控制之下,因此将 id 分配给元素,...也不是一个选项。

在我看来这应该可以解决问题,但它不起作用:

HtmlElement elementToClick = browser.Document.GetElementsByTagName("a") 
         .Cast<HtmlElement>() 
         .FirstOrDefault(m => m.GetAttribute("class") == "anchor1"); 
elementToClick.InvokeMember("click"); 

请您参考如下方法:

由于 class 是一个特殊的名称,因此它不会返回相应的值。您应该改用 className。下面的代码片段对我有用:

var elementToClick = browser.Document 
            .GetElementsByTagName("a") 
            .Cast<HtmlElement>() 
            .FirstOrDefault(m => m.GetAttribute("className") == "anchor1");