2013-08-20 11 views
27

htmlタグなしでWebページの表示テキスト部分をselenium webdriverで取得するにはどうすればよいですか?セレンのwebdriverでページの表示テキストを取得

私はHtmlunitの関数HtmlPage.asText()に相当するものが必要です。

WebDriver.getSource関数でテキストを取得し、jsoupで解析するだけでは十分ではありません。なぜなら、ページに非表示の要素(外部CSSによって)がある可能性があるからです。

おかげで、(先頭の要素を選択するために、またはいくつかの他のセレクタ)By.tagName("body")を行う

デビッド
+0

firefoxを使用している場合は、スクリーンショットを撮ることができます。実際にテキストが必要な場合は、表示されているものがすべて必要なのですか?通常、何かをかき集めなければならないときは、ページ上のいくつかの要素だけを気にします。 http://stackoverflow.com/questions/2646195/how-to-check-if-an-element-is-visible-with-webdriver –

答えて

29

は、その要素にgetText()を実行する表示テキストの全てを返します。

+0

「By」はどのようなオブジェクトですか? – User

+0

@macdonjoセレンがセレクターを分離する方法です。 'driver.findElement(By.selectorType(" selector "))' http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/By.html –

+0

ああ、私はそれを理解しました。私はPythonであり、それはJava構文です。ありがとう! – User

5

あなたが使用している言語はわかりませんが、C#ではIWebElementオブジェクトには呼び出せる.Textメソッドがあります。このメソッドは、要素のオープンとクローズの間に表示されるすべてのテキストを表示します。 XPathを使用してIWebElementを作成し、ページ全体を取得します。言い換えれば、body要素タグをつかんでその中のテキストを見ています。

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

これは、私はC#のセレンのお手伝いをすることができます

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

を使用する必要があります。私はdriver.findElement(BytagName( "body"))コマンドで解決しました。getText() –

+0

が完璧です。これは、上記のC#コードと同等のJavaに見えます。キーは効率のためにHTMLタグではなくボディをつかむことです。私はXPathを使用する傾向があります。なぜなら、Chromeでxpathを取得するのが簡単だからですが、By.cssSelector( "body")またはBy.tagName( "body")を使用することができます。それらはすべて同じ要素を選択します。 –

4

を使用し、セレンのために動作しません。これを使用すると、その特定のページのすべてのテキストを選択して、好みの場所にあるテキストファイルに保存することができます。

//これらのものを必ず使用してください。

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

//このコードを試してみてください。 //フォルダの場所

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

//

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

それが存在しない場合は、作成

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

//は、ページ内のすべての内容をcopiedtext.txtファイルを作成します。 。

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

人、人は意味があります。なぜこれは控除されたのですか?原因が、返された人物が余分なコードを追加したために、キャプチャされたものをテキストファイルに保存しますか?それは上で答えたものとすべて同じコードを持っています。 – IamBatman

関連する問題