Pobieranie danych z dynamicznej strony www wyświtlonej w WebBrowser

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

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

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

Rejestracja: 13 lat temu

Ostatnio: 14 minut temu

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

Rejestracja: 3 lata temu

Ostatnio: 19 minut temu

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

edytowany 1x, ostatnio: stivens, 2019-07-12 17:43

Pozostało 580 znaków

2019-07-12 17:44

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

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

Rejestracja: 3 lata temu

Ostatnio: 19 minut temu

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

edytowany 2x, ostatnio: stivens, 2019-07-12 17:52

Pozostało 580 znaków

2019-07-12 17:54

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

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

Rejestracja: 3 lata temu

Ostatnio: 19 minut temu

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#

edytowany 2x, ostatnio: stivens, 2019-07-12 18:02

Pozostało 580 znaków

2019-07-12 20:16

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

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

Rejestracja: 4 lata temu

Ostatnio: 28 minut temu

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

Rejestracja: 1 rok temu

Ostatnio: 4 dni temu

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

Rejestracja: 14 lat temu

Ostatnio: 1 dzień temu

0

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

Pozostało 580 znaków

Odpowiedz

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