2013-08-20 12 views
27

Jak uzyskać widoczną część tekstową strony internetowej przy pomocy selionowego webdrivera bez tagów html?Uzyskiwanie widocznego tekstu strony z selenowym webdriverem

Potrzebuję czegoś podobnego do funkcji HtmlPage.asText() z Htmlunit.

Nie wystarczy wziąć tekst za pomocą funkcji WebDriver.getSource i przeanalizować go za pomocą jsoup, ponieważ na stronie mogą być ukryte elementy (przez zewnętrzne css), które nie są nimi zainteresowane.

Dzięki, David

+0

Jeśli używasz firefoxa, możesz zrobić zrzut ekranu. Jeśli potrzebujesz tekstu, czy na pewno potrzebujesz wszystkiego, co jest widoczne? Normalnie, kiedy muszę coś zeskrobać, zależy mi tylko na kilku elementach na stronie. Zobacz także http://stackoverflow.com/questions/2646195/how-to-check-if-an-element-is-visible-w-webdriver –

Odpowiedz

29

Doing By.tagName("body") (lub jakąś inną, wybierz wariant górny element), a następnie wykonując getText() tego elementu zwróci wszystkie widocznego tekstu.

+0

Jakiego rodzaju obiektem jest "By"? – User

+0

@macdonjo Jest to sposób, w jaki selen oddziela ich selektory. 'driver.findElement (By.selectorType (" selector "))' http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/By.html –

+0

Och, wymyśliłem to. Jestem Python i to jest składnia Java. Dzięki! – User

5

Nie jestem pewien, jakiego języka używasz, ale w C# obiekt IWebElement ma metodę .Text, którą możesz wywołać. Ta metoda pokazuje cały tekst wyświetlany pomiędzy otwartym i zamkniętym elementem. Chciałbym utworzyć IWebElement przy użyciu XPath, aby pobrać całą stronę. Innymi słowy, chwytasz znacznik elementu body i patrzysz na jego tekst.

string pageText = driver.FindElement(By.XPath("//html/body/")).Text; 

to nie działa dla selenu, użyj

String yourtext= driver.findElement(By.tagName("body")).getText() ; 
+0

Rozwiązałem go za pomocą polecenia driver.findElement (By.tagName ("body")). GetText() –

+0

perfect. To wydaje się być odpowiednikiem kodu Java powyżej. Kluczem do sukcesu jest uchwycenie ciała, a nie znacznika html. Zwykle używam XPath, ponieważ łatwo jest uzyskać xpath w Chrome, ale możesz użyć By.cssSelector ("body") lub By.tagName ("body"), jak używałeś. Wszyscy wybierają ten sam element. –

4

mogę pomóc C# selenu. Korzystając z niego, możesz zaznaczyć cały tekst na danej stronie i zapisać go w pliku tekstowym w preferowanej lokalizacji.

// Upewnij się, że używasz tych rzeczy.

using System.IO; 
using System.Text; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Support.UI; 

// Po dotarciu do konkretnej strony wypróbuj ten kod.

IWebElement body = driver.FindElement(By.TagName("body")); 
var result = driver.FindElement(By.TagName("body")).Text; 

// Folder lokalizacja

var dir = @"C:Textfile" + DateTime.Now.ToShortDateString(); 

// jeśli nie istnieje, utwórz

if (!Directory.Exists(dir)) 
Directory.CreateDirectory(dir); 

// Tworzy copiedtext.txt plików z wszystkich treści na stronie .

File.AppendAllText(Path.Combine(dir, "Copiedtext.txt"), result); 
+2

Mężczyzna, ludzie są podli. Dlaczego zostało to odrzucone? Ponieważ osoba, która odpowiedziała, dodała dodatkowy kod "lil", aby zapisać to, co zostało przechwycone do pliku tekstowego? Ma taki sam kod jak te, które odpowiedziano powyżej. – IamBatman

Powiązane problemy