Wpisanie wartości na stronie www oraz klikniecie w button - C#

0

Witam, jest to mój pierwszy post na tym forum więc za błędy lub naruszenie zwyczajów przepraszam.
Mam taki problem, tworze program który będzie potrafił na stronie chomikuj.pl zachomikować plik ze zmiana nazwy folderu.

Program gdy klika w "Zachomikuj folder" nie potrafi znaleźć button'a OK (potwierdzenia).

          HtmlElement msgForm = wb.Document.GetElementById("folderActionButtos");
            HtmlElementCollection col = msgForm.GetElementsByTagName("a");
            if (col.Count > 0) col[col.Count - 1].InvokeMember("click");


                        HtmlElement msgForm2 = wb.Document.GetElementById("copyFolderForm");
                        // wypelnij pole tekstowe
                        msgForm2.All["cfFolderName"].SetAttribute("value", comment);
                        HtmlElementCollection col2 = msgForm2.GetElementsByTagName("input");
                        // wcisnij guzik (nie mozna po nazwie buttona bo ch*** jej nie ustawili)
                        if (col2.Count > 1) col2[col2.Count - 2].InvokeMember("click");

Program sie sypie jak ma znaleźć pole tekstowe ale również jeśli dam przycisk pierwszy. Tak jakby nie było tego na stronie www.
Jestem w stanie zapłacić za pomoc, gdyż z tej wiedzy skorzystam kilka krotnie w programie, więc jak jak załapie to już będę wiedział jak to robić na następny raz.

0

if (col2.Count > 0) col2[col2.Count - 2].InvokeMember("click");

A jak będzie tylko jeden element to odwołujesz się do indeksu -1.

0
Azarien napisał(a):

if (col2.Count > 0) col2[col2.Count - 2].InvokeMember("click");

A jak będzie tylko jeden element to odwołujesz się do indeksu -1.

No tak, to akurat literówka ale program wysypuje się już wcześniej.
Program nie przechodzi tej lini:

msgForm2.All["cfFolderName"].SetAttribute("value", comment);

Bo już wtedy szuka "cfFolderName" którego nie znajduje - wiec Error

0

"folderActionButtos" czy "folderActionButtons"? Naucz się debugować swoje programy, to sam będziesz znajdować i naprawiać takie błędy.

0
ŁF napisał(a):

"folderActionButtos" czy "folderActionButtons"? Naucz się debugować swoje programy, to sam będziesz znajdować i naprawiać takie błędy.

Dobrze jest!
**Ma być: "folderActionButtos" **- taki element ma chomikuj, może sie wydawać nie poprawny ale tak maja

WIEC TO TY NAUCZ SIĘ SPRAWDZAĆ COŚ DOGŁĘBNIE, A NIE PISAĆ BEZMYŚLNIE I NABIJAĆ POSTY!

Przecież napisałem gdzie błąd wywala:

msgForm2.All["cfFolderName"].SetAttribute("value", comment); 
1

Pfff... Grzeczniej, bo dostaniesz klapsa, chcesz pomocy i jeszcze się ciskasz. Caps Lock Ci się zacina, może pora na zmianę klawiatury?
Napisałeś, gdzie leci błąd, ale nie raczyłeś napisać jaki to błąd. Najwyraźniej też nie rozumiesz, że miejsce objawienia się błędu niekoniecznie jest miejscem jego powstania. W tym wypadku pomyliłem msgForm2 z msgForm - nie ma to jak dobre nazewnictwo zmiennych - i z tego powodu mój strzał był chybiony. Stąd druga porada - użyj debugera (http://4programmers.net/C_sharp/Artyku%C5%82y/Debugowanie). Postaw breakpoint na linijce, która sypie błędem, uruchom program tak, aby zatrzymał na tym breakponcie i sprawdź wartości wszystkich zmiennych/pól, które mogły się do tego błędu przyczynić. Wartość msgForm2.All["cfFolderName"] sprawdzisz sobie w Immediate Window.

P.S. "Bezmyślnie" pisze się razem.

0

A temu tak na Ciebie naskoczyłem bo zarzucasz mi że z debagera nie umiem korzystać, a bardzo dobrze go znam. Mam problem z tym że nie wiem jak napisać ten element aby w wb znajdował sie ten element.

Błąd jest temu że:

HtmlElement msgForm = wb.Document.GetElementById("folderActionButtos");
HtmlElementCollection col = msgForm.GetElementsByTagName("a");
if (col.Count > 0) col[col.Count - 1].InvokeMember("click"); // Kod odpowiedzialny na klikniecie w button Zachomikuj folder

uruchamia się skrypt odpowiedzialny za okienko do wpisania nazwy zachomikowanego folderu i potwierdzenie. Problem jest taki że w "wb" - obiekt WebBrowser'a nie ma w nim elementu który jest poniżej szukany wiec go nie znajduje. I nie wiem jak to przerobić aby wb miało ten element jak sie do tego dobrać.

HtmlElement msgForm2 = wb.Document.GetElementById("copyFolderForm"); // w tej linijcje już nie znajduje obiektu "copyFolderFrom" bo na debagu "msgFrom2" jest nullem
// wypelnij pole tekstowe
msgForm2.All["cfFolderName"].SetAttribute("value", comment);
0

Ja rozumiem, że krzyczysz, bo masz gorszy dzień. Problem w tym, że każdy ma prawo do gorszego dnia, moderatorzy też.

Moim zdaniem problem wynika z tego, że emulujesz jakieś klikanie po stronie, zamiast wysłać odpowiednie żądanie do serwera. Zainteresuj się lepiej klasą HttpWebRequest.

0
HttpWebRequest

Bawiłem się tym jak robiłem logowanie, ale nie za bardzo ogarniałem tego i przeszedłem bardziej na symulacje niż na żądania.

Znasz jakiś dobry poradnik do tego, bo to mnie trochę przerasta jeśli chodzi o to HttpWebRequest.
Bo logowanie to wiem jak zrobić, ale gorzej z jakimś zapytaniem z kliknieciem w button itd.

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