Witam,
jaki jest najlepszy sposób na dostanie się do kodu html renderowanego przez JavaScript? Na stackoverflow znalazłem propozycje użycia klasy WebBrowser lub Panel (z WebControls). Czy istnieją jakieś alternatywne rozwiązania? Projekt w wpf, dlatego naturalnym wyborem z dwóch powyższych byłaby klasa WebBrowser, ale jak tak się jej teraz przyglądam to nie widzę metody ani właściwości, która mogłaby mi zwrócić źródło.
Tylko po co Ci ten kod HTML? Skoro strona w angular/react, to pod spodem ma zapewne jakieś API, z którego możesz pobrać dane bezpośrednio.
Api jest ale płatne, a ja robię mały program tylko do moich potrzeb. Chodzi o translate google. Program ma działać tak, że podczas czytania jeśli nie wiem co znaczy dane słowo / wyrażenie to je zaznaczam, wciskam np. ctrl+c i z automatu mi zapisuje to słowo wraz z tłumaczeniem. Z tego co wyczytałem to api kosztuje 20$ za chyba milion znaków i trzeba podać pełne swoje dane do faktury na co całkiem nie mam ochoty. Dlatego kombinuje. Może znacie jakiegoś innego translatora, który udostępnia darmowe api dla jakiś małych ilości requestów?
Jeżeli chodzi o same parsowanie stron, to poczytaj o HtmlAgilityPack.
A to widziałeś: https://ctrlq.org/code/19909-google-translate-api ?
Dzięki @somekind nie znałem tego. Właśnie to testowałem i działa. Ale nie do końca... W odpowiedzi dostajemy najlepsze tłumaczenie. Tylko do nauki to trochę za mało bo na przykładzie słowa "humble" - z tego api dowiem się, że to znaczy pokorny. Natomiast ze strony translate.google dowiemy się, że "humble" to nie tylko przymiotnik, ale również może być czasownikiem i znaczy wtedy "upokarzać, poniżać". Dodatkowo dostajemy jeszcze sposoby użycia w danym języku co jest moim zdaniem świetne.
API: https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=pl&dt=t&q=humble
translate.google: https://translate.google.pl/#en/pl/humble
Dlatego mam takie parcie na wydobycie tego htmla.
Niemniej jednak wielkie dzięki za tego linka zwłaszcza, że była 2 w nocy:-) Jeśli nie uda mi się wydobyć nic z translate.google to pewnie użyję tego co mi podesłałeś.
Co do parsowania to używam fizzlerex czy jakoś tak. Zbudowane to jest właśnie na HtmlAgilityPack i można przeszukiwać html jak w jquery.
Znalazłem i sprawdziłem rozwiązanie, może komuś się przyda.
Użyłem klasy WebBrowser z System.Windows.Forms. Może to wyglądać mniej więcej tak:
WebBrowser browser = new WebBrowser();
browser.AllowNavigation = true;
browser.DocumentCompleted += WebBrowser_DocumentCompleted;
browser.Navigate(new Uri("https://google.com"));
private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string renderedHtml = (sender as WebBrowser).Document.GetElementsByTagName("html")[0].OuterHtml; //ten string zawiera html po renderowaniu js
}