2013-08-20 14 views
27

Wie bekomme ich den sichtbaren textteil einer webseite mit selen webdriver ohne die html tags?erhalten sichtbaren text der seite mit selen webdriver

Ich brauche etwas, das der Funktion HtmlPage.asText() von Htmlunit gleichwertig ist.

Es ist nicht genug, den Text mit der Funktion WebDriver.getSource zu nehmen und es mit jsoup zu analysieren, weil es in der Seite versteckte Elemente (durch externe CSS) geben könnte, an denen ich nicht interessiert bin.

Danke, David

+0

Wenn Sie Firefox verwenden, können Sie einen Screenshot machen. Wenn du den Text wirklich haben willst, brauchst du wirklich alles, was sichtbar ist? Normalerweise, wenn ich etwas kratzen muss, interessieren mich nur ein paar Elemente auf der Seite. Werfen Sie auch einen Blick auf http://stackoverflow.com/questions/2646195/how-to-check-if-an-election-is-visible-with-webdriver –

Antwort

29

tun By.tagName("body") (oder einen anderen Selektor das oberste Element wählen), dann auf dieses Element getText() Durchführung werden alle sichtbaren Text zurückzukehren.

+0

Welche Art von Objekt ist "By"? – User

+0

@macdonjo Es ist die Art, wie Selen ihre Selektoren trennt. 'driver.findElement (By.selectorType (" selector "))' http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/By.html –

+0

Oh, ich habe es herausgefunden. Ich bin Python und das ist die Java-Syntax. Vielen Dank! – User

5

Ich bin mir nicht sicher, welche Sprache Sie verwenden, aber in C# hat das IWebElement-Objekt eine .Text-Methode, die Sie aufrufen können. Diese Methode zeigt den gesamten Text an, der zwischen dem Öffnen und Schließen des Elements angezeigt wird. Ich würde ein IWebElement mit XPath erstellen, um die gesamte Seite zu erfassen. Mit anderen Worten, Sie greifen das Body-Element-Tag und betrachten den darin enthaltenen Text.

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

dies für Selen nicht funktioniert, kann

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

Ich löste es mit dem Befehl driver.findElement (By.tagName ("body")). GetText() –

+0

perfekt. Das scheint der Java-Code zu sein, der dem obigen C# -Code entspricht. Der Schlüssel ist, den Körper nicht HTML-Tag für die Effizienz zu greifen. Ich neige dazu, XPath zu verwenden, weil es einfach ist, xpath in Chrome zu erhalten, aber Sie können By.cssSelector ("body") oder By.tagName ("body") wie gewohnt verwenden. Sie alle wählen das gleiche Element aus. –

4

ich Sie mit C# Selen verwenden helfen. Mit dieser Option können Sie den gesamten Text auf dieser Seite auswählen und in einer Textdatei an Ihrem bevorzugten Ort speichern.

// Stellen Sie sicher, dass Sie diese Materialien verwenden.

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

// Nach dem Erreichen der jeweiligen Seite diesen Code ausprobieren.

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

// Ordner

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

// wenn es nicht existiert erstellen

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

// Erstellt eine Datei copiedtext.txt mit allen Inhalten auf der Seite .

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

Mann, Leute sind gemein. Warum wurde das abgelehnt? Weil die Person, die geantwortet hat, einen kleinen zusätzlichen Code hinzugefügt hat, um zu speichern, was in einer Textdatei erfasst wurde? Es hat den gleichen Code wie die oben genannten. – IamBatman

Verwandte Themen