Как щелкнуть элемент (гиперссылку) на веб-форме из C #, если у него нет идентификатора и имени - PullRequest
2 голосов
/ 07 июля 2011

Последние две недели я как бы застрял на проблеме.

Я занимаюсь разработкой некоторых веб-скребков на C # и в своем приложении использую элемент управления WinForms WebBrowser.Я могу заполнить веб-форму, которая открывается в моем браузере, и автоматически отправить ее, используя следующий код:

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

Пока все в порядке, но проблема в том, что есть еще один элементв веб-форме, которую я тоже хочу щелкнуть, но у этого элемента нет идентификатора или имени, поэтому я не знаю, как щелкнуть этот элемент.

Пожалуйста, помогите мне как можно скорее, мне это нужно для моей магистерской диссертации.

(Я хочу нажать на кнопку со следующей стрелкой на веб-сайте: 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=-&sortBy=sort_trade&availableLetters=ABCDEFGHIJKLMNOPQRSTUVW)

Ответы [ 3 ]

3 голосов
/ 07 июля 2011

В прошлом я писал много веб-скребков, используя встроенные веб-браузеры, поэтому вы попали в нужное место.

Когда элемент не имеет имени, вам нужно найти его по любому содержаниюили другой связанный элемент с именем.

  • В первом случае мы написали вспомогательные методы для итерации иерархии в поисках определенного фрагмента содержимого в элементе.
  • Для второговариант, вы получаете именованный элемент и используете определенный индекс для нужного потомка.
  • Комбинация обоих (найдите конкретного родителя, затем найдите ребенка с нужным содержимым)

На вашей конкретной примерной веб-странице якорь next page имеет тип класса "arrow next", который вы можете искать.

2 голосов
/ 07 июля 2011

Вы могли бы сделать

HtmlElement next_arrow =  document.GetElementsByTagName("a")
                               .Cast<HtmlElement>()
                               .Where(e => e.GetAttribute("class") == "arrow next")
                               .FirstOrDefault();
if (next_arrow != null)
{
     next_arrow.InvokeMember("click");
}
0 голосов
/ 07 июля 2011

Вот хитрость, а не InvokeMember("click"), а просто "имитация клика" -

это ссылка для первой страницы:

gelbeseiten.de / yp / 11 //subscriberlist_pageAction.yp sessionDataString = H4sIAAAAAAAAAI2PQU8CMRCFfw0XSEmns9128k5KongwGjFeSZftIqILbhcVf70NSgg3X-pbyXjLfvCFpqsbbIMpwbVRRuaBELKm6iew5T4gLFUpdmKpewJAGD8xV7JaxalfpdZX6mP31bH4WQfZblJehXcd2tGvr0WwbunVIKbYIZjjKmoa3atct4RSh-пА / S912oY4qhWzyjJkLvPZV4P4JetNFHYWOG2OoCH4pZlyU-pjWdhjS / LY2sp7-p1lLCLOGXwTLqpT1XSqOiXcpE3Xzw-pncUtGSDNp0ZZwR0we92TxSHjIX0x-pIQM-p0AZuciLl7M / KGE-pmcGjIOsvEpTB-pADJS0suGAQAA & страница = 0 & filterTrade = - & filterFunction = - & SortBy = sort_trade & availableLetters =ABCDEFGHIJKLMNOPQRSTUVW

, как вы видите страницу = 0;нажав рядом, дает ссылку -

1011 * gelbeseiten.de / YP / 11 // subscriberlist_pageAction.yp sessionDataString = H4sIAAAAAAAAAI2PQU / DMAyFf00vmzLFdprE8gkmwTggEENcp3RNxxh0o-pmA8euJBlO1G0-п-pvCf58zNwUzW-pDKyQalSmckExl6DqJpKnPCEuVbDaYFUvBcEIFXgVu1Ws2nV6Xac-pZn89X5xFwoed2MvQbmI73rf1eL4L3SakFFsJOBpnzcJbte9W4hSI-ро / S912oY4qhWz5LDSC992Dl / QR60ahPki2OZKeNfCgiba18oicmLV8lTcoS8t6BJ8zsHMo3yEU1VE1D1ZmWm7Tt-psXxtNwCMmjS4BhJ7oDAy72WR5CH /MT0l1HQEVa46QDK2Z / JsTyhcdIAWrZeGy8 / k7LJ5YQBAAA-e & page = 1 & filterTrade = - & filterFunction = - & sortBy = sort_trade & availableLetters = ABCDEFGHIJKLMNW * 101 * 101

1019 * * 9

RU * 113и так далее ... в общем, щелчок по следующему означает page = (x + 1) нажатие prev означает page = (x-1) .поэтому постройте строку в соответствии с требованиями.это решает вашу проблему, однако есть и другие данные, которые также отправляются с помощью строки запроса, и вам также необходимо добавить ее в строку.
...