Ustawienie wartości elementu o zmiennym ID i nazwie

0

Chciałbym wypełnić pola w formularzu, jednak mają one zmienne ID i nazwy, więc polecenie tego typu odpada:

webBrowser1.Document.GetElementById("id_elementu").SetAttribute("value", moj_tekst);

Taka konstrukcja wypełnia mi wszystkie pola formularzy na stronie jednakowo (też źle):

HtmlElementCollection elc = this.webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement el in elc)
{
	if (el.GetAttribute("name").Contains("x_"))
	{
		el.SetAttribute("value", moj_tekst);
	}
}

Jak inaczej mogę się dostać do takich elementów?
user image

0

Moja odpowiedź Ci nie pomoże, ale właśnie o to twórcy chodziło, żeby boty nie wypełniały mu formularza.
Takich czasów dożyliśmy, że formularze wypełniają ludzie, a dla komputerów jest API.

1

Spróbuj po tekście w po poprzedzających labelach.

0

Nadal nie wiem, jak można zrobić to na podstawie labeli.

Linijki z polami do wypełnienia są tego typu:

<input id="x_976df714c8cb5d77" name="x_976df714c8cb5d77" value="" type="text" class="inPut" maxlength="40">

Może da się jakoś pobierać je w pętli i później za pomocą wyrażeń regularnych wyodrębnić tylko nazwę ID?

W dobrym kierunku idę, czy za bardzo mieszam?

1

Poczytaj o xpath i wyszukiwaniu elementow html za jego pomoca.

Na przyklad dla imienia zapytanie xpath bedzie wygladac jakos tak:
//label[text() = 'имя']/..//input[0]

0

To może się udać. Znalazłem polecenie, które w Selenium potrafi wyciągnąć wartość z fora przy danym labelu:

selenium.Type(selenium.getAttribute("//label[text()='имя']/@for"));

Tylko jak zastosować to do wbudowanej przeglądarki z Visual Studio, w której mam pozostałą część programu? Można tak zrobić? Selenium pobrałem i zainstalowałem przez NuGet, lecz jak to dołączyć do projektu?

1

Nie potrzebujesz do tego Selenium. Uzyj webBrowser1.Document.InvokeScript do wywolania javascriptowego evaluate, np.

document.evaluate('twoj xpath', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

Popatrz np. http://stackoverflow.com/questions/25355386/using-xpath-and-webbrowser-control-to-select-multiple-nodes - serio, 10 sekund w google....

0

topik92 i anonymous13: dziękuję za pomoc. Wyszukałem inputy na podstawie właściwości for w labelu za pomocą XPath, jak napisaliście. Już wszystko działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1