Pobieranie danych z dynamicznej strony www wyświtlonej w WebBrowser

Odpowiedz Nowy wątek
2019-07-12 17:26
0

Próbuję automatycznie wypełnić formularz interaktywny na stronie www umieszczonej WebBrowser. Formularz działa w taki sposób, że na stronie jest 50 pól tekstowych oraz przycisków. Na początku widać tylko jedno pole tekstowe i przycisk, a reszta ma własność "display" ustawioną na "none". Po wpisaniu tekstu i wciśnięciu pierwszego przycisku, poprzez ajax, zostaje wysłane zapytanie do serwera. Po bliżej nieokreślonym czasie (od 0,5 do 10 sekund), po utrzymaniu odpowiedzi, kolejne pole tekstowe i przycisk mają własność "display" ustawioną na "block". I tak 49 razy. Jestem w stanie bez problemu wprowadzić dane do wybranego pola tekstowego i zasymulować wciśnięcie przycisku, ale nie umiem poczekać zanim kolejne elementy formularza będą widoczne. Próbuję to zrobić w taki sposób, że chcę sprawdzać czy własność "display" następnego przycisku, czy jest równa "block". Jeżeli tak, to wypełnij pole i wciśnij przycisk. Problem w tym, że użycie jakiejkolwiek pętli, w której sprawdzana jest własność display, zatrzymuje wykonywanie strony w WebBrowser.

edytowany 1x, ostatnio: Bednarus3, 2019-07-12 17:26

Pozostało 580 znaków

2019-07-12 17:40
0

A ta pętla jest w JS? Jak tak, to musisz używać setTimeout.

Pozostało 580 znaków

2019-07-12 17:42
0

Po bliżej nieokreślonym czasie (od 0,5 do 10 sekund), po utrzymaniu odpowiedzi, kolejne pole tekstowe i przycisk mają własność "display"

Wyjatkowo upierdliwa strona


Jestes w stanie odpalic skrypt js na tej stronie? Ustaw wszystko na display block


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 1x, ostatnio: stivens, 2019-07-12 17:43

Pozostało 580 znaków

2019-07-12 17:44
0

Pętla jest w C#. Nie mam dostępu do kodu strony www. Celem jest zrobienie automatu, który wypełni formularz za człowieka. Jeszcze jedna ważna sprawa. W trakcie wykonywania zapytania, pomiędzy kolejnymi etapami wyświetlany jest element

przysłaniający wszystko z napisem "Proszę czekać". Po otrzymaniu odpowiedzi ustawiana jest dla niego własność display: none;</p>
edytowany 2x, ostatnio: Bednarus3, 2019-07-12 17:49

Pozostało 580 znaków

2019-07-12 17:47
0

https://code.msdn.microsoft.c[...]to-inject-javascript-f3970459

Edit: jsem mozesz manipulowac DOMem i ustawic display jaki chcesz
Edit2: mozesz tez po prostu zobaczyc jak wygladaja requesty do serwera i je wykonywac bez zbednego posrednictwa front-endu


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 2x, ostatnio: stivens, 2019-07-12 17:52

Pozostało 580 znaków

2019-07-12 17:54
0

To co zostanie wprowadzone do kolejnych pół formularza jest ściśle uzależnione od odpowiedzi z serwera na poprzednie zapytanie. Dlatego nie mogę wprowadzić wszystkich naraz.

edytowany 2x, ostatnio: Bednarus3, 2019-07-12 17:56

Pozostało 580 znaków

2019-07-12 18:01
0
Bednarus3 napisał(a):

To co zostanie wprowadzone do kolejnych pół formularza jest ściśle uzależnione od odpowiedzi z serwera na poprzednie zapytanie. Dlatego nie mogę wprowadzić wszystkich naraz.

Moze znajdz skrypt ktory to obsluguje (pewnie jakis ajax) i zmodyfikuj do swoich celow zeby od razu po odpowiedzi serwera triggerowal sie nastepny stage twojego skryptu.

W sensie zmodyfikuj i podmien

Skrypt do obslugi musi byc jawny bo to front-end. Najwyzej moze byc zminimalizowany (beautifier rozwiazuje problem) albo zobfuskowany

Edit: a juz jak sie tak chcesz bawic to i tak lepiej w jsie a nie C#


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 2x, ostatnio: stivens, 2019-07-12 18:02

Pozostało 580 znaków

2019-07-12 20:16
0

To jest jedna opcja, żeby wstrzyknąć javascript, a potem wywołać funkcję i jako parametr podać dane do wprowadzenia w formularzu. Jednakże wolałbym w C# mieć równolegle działającą kontrolkę WebBrowser razem z metodą, która będzie sprawdzała stan strony www i w odpowiednim momencie wprowadzała dane.

Jeśli temat został zakończony zaznacz pomocną odpowiedź - Mondonno 2019-07-13 10:15

Pozostało 580 znaków

2019-07-12 20:18
1

Użyj Selenium.

IWebDriver driver = new ChromeDriver();    
string url = "https://www.google.com";
IWebElement textBox;
driver.Navigate().GoToUrl(url);
textBox = driver.FindElement(By.Name("username"));
textBox.SendKeys("Test text");

Jeżeli nie chcesz aby odpalała Ci się przeglądarka Chrome/Firefox, itd. to możesz odpalić z parametrami typu --headless

edytowany 3x, ostatnio: WeiXiao, 2019-07-12 20:20
Co oferuje pupper w porównaniu do Sel? - WeiXiao 2019-07-12 20:53

Pozostało 580 znaków

2019-07-13 13:49
0

Ogarnąłem temat. Obsługę wypełniania pól i wciskania przycisków umieściłem w BackgroundWorker. Teraz asynchronicznie do WebBowser następuje sprawdzanie czy pojawiły się kolejne elementy na stronie.

Pozostało 580 znaków

2019-07-13 22:46
0

@Bednarus3: możesz rzucić jakiś kod? Dane wrażliwe, jeśli są, wytnij oczywiscie...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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