Cześć,
chcę stworzyć program WPF wyświetlający wyniki wyszukiwania internetowego z linkami, jak Bing. Korzystam z przeglądarki PhantomJS, która nie posiada interfejsu. Pobiera dane z wyszukiwarki Qwant Lite.
Obecnie na okienku aplikacji wypisanych jest tylko kilka rezultatów (tytuły, adresy URL i opisy stron) bez odnośników. Podam przykład:
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
Wiem, że są pokazywane wszystkie skopiowane przez PhantomJS wyniki, kiedy nie ma tytułów z właściwością PropertyUrl. Ta właściwość określa, do jakiej strony trafi użytkownik po kliknięciu w dany element. Tytuły nie są odnośnikami do żadnej strony.
Jak wyświetlić wszystkie rezultaty wyszukiwarki z linkami? Mile widziane odnośniki do stron, które pokazują rozwiązanie problemu.
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;
}
}