如何从c#中点击一个元素(超链接),当它没有任何ID和名称时

本文关键字:任何 ID 元素 一个 超链接 | 更新日期: 2023-09-27 18:01:32

在过去的两个星期里,我一直被一个问题困住了。

我正在使用c#开发一些web抓取器,我在我的应用程序中使用WinForms WebBrowser控件。我可以填写在浏览器中打开的web表单,并使用以下代码自动提交:

HtmlElement submitButton = document.GetElementById("Element_ID″);
submitButton.InvokeMember(“click”);

到目前为止一切都很好,但问题是,有一个另一个元素在web表单,我想点击,但这个元素没有任何id或名称,所以我不知道如何点击这个。

请尽快帮助我,我的硕士论文需要它。

(我想点击下一页箭头按钮在给定的网站:http://www.gelbeseiten.de/yp/11//subscriberlist_pageAction.yp?sessionDataString=H4sIAAAAAAAAAI2PQU8CMRCFfw0XSEmns9128k5KongwGjFeSZftIqILbhcVf70NSgg3X-pbyXjLfvCFpqsbbIMpwbVRRuaBELKm6iew5T4gLFUpdmKpewJAGD8xV7JaxalfpdZX6mP31bH4WQfZblJehXcd2tGvr0WwbunVIKbYIZjjKmoa3atct4RSh-pA/S912oY4qhWzyjJkLvPZV4P4JetNFHYWOG2OoCH4pZlyU-pjWdhjS/LY2sp7-p1lLCLOGXwTLqpT1XSqOiXcpE3Xzw-pncUtGSDNp0ZZwR0we92TxSHjIX0x-pIQM-p0AZuciLl7M/kGE-pmcGjIOsvEpTB-pADJS0suGAQAA&page=0&filterTrade=-&filterFunction=-&sort通过= sort_trade& availableLetters = ABCDEFGHIJKLMNOPQRSTUVW)

如何从c#中点击一个元素(超链接),当它没有任何ID和名称时

我以前用嵌入式webbrowser写过很多web scraper,所以你来对地方了。

当元素没有名称时,您需要通过内容或命名的另一个相关元素来查找它。

  • 在第一个实例中,我们编写了帮助器方法来迭代层次结构,寻找元素中的特定内容。对于第二个选项,您获得命名元素并为所需的子元素使用特定索引。
  • 两者的组合(查找特定的父节点,然后查找具有正确内容的子节点)

在您的特定示例网页中,下一页锚有一个类类型"arrow next",您可以搜索

你可以做

HtmlElement next_arrow =  document.GetElementsByTagName("a")
                               .Cast<HtmlElement>()
                               .Where(e => e.GetAttribute("class") == "arrow next")
                               .FirstOrDefault();
if (next_arrow != null)
{
     next_arrow.InvokeMember("click");
}

这里有一个技巧,不是由InvokeMember("click")而只是"模拟点击"-

这是第一页的链接:

gelbeseiten.de/yp/11//subscriberlist_pageAction.yp ? sessionDataString = H4sIAAAAAAAAAI2PQU8CMRCFfw0XSEmns9128k5KongwGjFeSZftIqILbhcVf70NSgg3X-pbyXjLfvCFpqsbbIMpwbVRRuaBELKm6iew5T4gLFUpdmKpewJAGD8xV7JaxalfpdZX6mP31bH4WQfZblJehXcd2tGvr0WwbunVIKbYIZjjKmoa3atct4RSh-pA/S912oY4qhWzyjJkLvPZV4P4JetNFHYWOG2OoCH4pZlyU-pjWdhjS/LY2sp7-p1lLCLOGXwTLqpT1XSqOiXcpE3Xzw-pncUtGSDNp0ZZwR0we92TxSHjIX0x-pIQM-p0AZuciLl7M/kGE-pmcGjIOsvEpTB-pADJS0suGAQAA& = 0页, filterTrade =和;filterFunction =和sortBy = sort_trade& availableLetters = ABCDEFGHIJKLMNOPQRSTUVW

如你所见page=0;单击下一步,给出链接-

gelbeseiten.de/yp/11//subscriberlist_pageAction.yp ? sessionDataString = H4sIAAAAAAAAAI2PQU/DMAyFf00vmzLFdprE8gkmwTggEENcp3RNxxh0o-pmA8euJBlO1G0-p-pvCf58zNwUzW-pDKyQalSmckExl6DqJpKnPCEuVbDaYFUvBcEIFXgVu1Ws2nV6Xac-pZn89X5xFwoed2MvQbmI73rf1eL4L3SakFFsJOBpnzcJbte9W4hSI-pQ/S912oY4qhWz5LDSC992Dl/QR60ahPki2OZKeNfCgiba18oicmLV8lTcoS8t6BJ8zsHMo3yEU1VE1D1ZmWm7Tt-psXxtNwCMmjS4BhJ7oDAy72WR5CH/MT0l1HQEVa46QDK2Z/JsTyhcdIAWrZeGy8/k7LJ5YQBAAA-e& = 1页, filterTrade =和;filterFunction =和;sortBy = sort_trade& availableLetters = ABCDEFGHIJKLMNOPQRSTUVW

现在

= 1页

等等…一般情况下,单击next表示page=(x+1)单击previous 表示page=(x-1)。因此,根据要求构建一个字符串。这解决了我们的问题,然而,还有一些其他的数据也发送与querystring,你必须追加到字符串以及