Czarnowłosy Napisano Luty 6, 2020 Zgłoś Udostępnij Napisano Luty 6, 2020 Cześć, chcę stworzyć program wyświetlający wyniki wyszukiwania internetowego z aktywnymi linkami, jak DuckDuckGo. Używam przeglądarki PhantomJS bez interfejsu. Pobieram dane z rezultatów wyszukiwarki Qwant Lite. Teraz na okienku aplikacji wypisanych jest tylko kilka rezultatów (tytuły, adresy URL i opisy stron) bez odnośników. Podam przykład: Cytat Microsoft ułatwia przejście z Windows 7 na Windows 10 - tytuł strony https://www.komputerswiat.pl/[...]ndows-7-na-windows-10/d756zxe - adres URL Windows 7 to system operacyjny, który wkrótce zostanie porzucony. Wsparcie zakończy się w styczniu 2020 roku. Microsoft zdaje sobie sprawę z tego, że pod kontrolą "siódemki" pracują ... - opis strony Zauważyłem, że są pokazywane wszystkie skopiowane z Qwant Lite tytuły bez właściwości PropertyUrl. Ta właściwość określa, do jakiej strony trafi użytkownik po kliknięciu lewym przyciskiem myszy w tytuł. Tytuły nie są jednak odnośnikami do jakiejkolwiek strony. Jak wyświetlić wszystkie rezultaty wyszukiwarki z linkami? bool search_end = false, page_se = false; byte page = 0; // Numer rezultatu while (!search_end) { try { while (!page_se) { try { Run title = new Run(phantomDriver.FindElements(By.ClassName("result")).ElementAt(page).FindElement(By.ClassName("title")).Text); // Tytuł strony Hyperlink hyperlink = new Hyperlink(title) { NavigateUri = new Uri(phantomDriver.FindElements(By.ClassName("result")).ElementAt(page).FindElement(By.ClassName("url")).Text) }; Results.Inlines.Add(hyperlink); // Results - Nazwa elementu TextBlock | Dodawanie linku Results.Text += Environment.NewLine; Results.Text += phantomDriver.FindElements(By.ClassName("result")).ElementAt(page).FindElement(By.ClassName("url")).Text + Environment.NewLine; // Dodawanie adresu URL Results.Text += phantomDriver.FindElements(By.ClassName("result")).ElementAt(page).FindElement(By.ClassName("desc")).Text + Environment.NewLine + Environment.NewLine; // Dodawanie opisu ++page; // Pobieranie danych z następnego wyniku } catch { page_se = true; // Koniec kopiowania informacji z obecnej strony wyszukiwarki } } phantomDriver.FindElement(By.ClassName("next")).Click(); // Przejście do następnej strony page = 0; } catch // Zamknięcie przeglądarki { phantomDriver.Quit(); search_end = true; } } Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Czarnowłosy Napisano Marzec 7, 2020 Autor Zgłoś Udostępnij Napisano Marzec 7, 2020 Mile widziane są odnośniki do stron/filmików pokazujących rozwiązanie problemu. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Bartosz Wójcik Napisano Marzec 8, 2020 Zgłoś Udostępnij Napisano Marzec 8, 2020 Firmy jak Google czy inne wyszukiwarki chronią się przed tym co chcesz osiągnąć, zrobisz za dużo zapytań to ci zablokują sesję, do tego typu rzeczy powinno się używać API danej usługi, ale wątpię czy ją udostępniają, bo to dla nich źródło zarobku, a ty chcesz to obchodzić. Możesz próbować parsowania strony, klikania na dalsze wyniki, ale moim zdaniem na dłuższą metę Cię zablokują. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Czarnowłosy Napisano Marzec 9, 2020 Autor Zgłoś Udostępnij Napisano Marzec 9, 2020 Dziękuję za odpowiedź. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.