2012-04-25 7 views
0

これらのコードブロックのテキスト部分だけを解析するにはどうすればよいですか?私は、JavaでSeleniumクライアントドライバを使用しています。xpathまたはcssSelectorでHTMLを解析するには?

<li id="NOT_PUT_PREF_STORE" style=""> 
<span id="STORE_AVAIL" class="BodyLBoldGrey StockStat">Out of stock</span> <span id="InYourLocal">in your local</span> <span id="storeRollover_2"><span id="STORE_CITY" class="BodyLBoldLtgry VIBSStore1">West Hills</span></span> store<span id="notSelectOptionSOI">.</span> 
</li> 

または

<li id="NOT_PUT_PREF_STORE" style=""> 
<span id="STORE_AVAIL" class="BodyLLtgry StockStat">Not carried</span> <span class="BodyLLtgry" id="InYourLocal">in your local</span> <span id="storeRollover_2"><span id="STORE_CITY" class="BodyLBoldLtgry VIBSStore1">West Hills</span></span> store<span id="notSelectOptionSOI">.</span> 
</li> 

または

<li id="NOT_PUT_PREF_STORE" style=""> 
<span id="STORE_AVAIL" class="BodyMBold StockStatGreen">In stock</span> <span id="InYourLocal">in your local</span> <span id="storeRollover_2"><span id="STORE_CITY" class="BodyLBoldLtgry VIBSStore1">West Hills</span></span> store<span id="notSelectOptionSOI">.</span> 
</li> 

私はwebelementにおけるこれらの変化のそれぞれ(すなわち内のテキスト部分を解析しようとしています:アウト、株式では、実施しません株式の)。私はセレンとHTMLの解析に非常に新しいユーザーですので、これは私が機能的になるのは難しいです。

私はそれが

WebElement driver = new FirefoxDriver(profile); 
driver.get(Url); 
System.out.println(driver.getElement(By.id("STORE_AVAIL").getText()); 

ない私はcssSelectorでそれを行うだろうが、人々はそれが高速である私に言うかどうかはわかりのようなものだろうと考えていました。 これは動作しますか?

driver.getElement(By.xpath("//li[@id='NOT_PUT_PREF_STORE']./span[@id='STORE_AVAIL']").getText() 
+4

_ "私が探している文字列が実際にページソースに格納されていません。" _それでは、どのように表示されますか? JavaScript? _ "しかし、STORE_AVAILは実際にページソースにあります。" _私はあなた自身と矛盾していると思うが、明確ではない。 –

+0

BTW上記のコードは何ですか?私には、あなたが必要なものを印刷する必要があります... –

答えて

0

私はページ上の要素を見つけるためにしようとすると、私はいつもで私のロケータを構築:

  1. ID = driver.getElement(By.id("STORE_AVAIL").getText());
  2. CSSセレクタ= driver.getElement(By.css("span#STORE_AVAIL").getText());
  3. のxpath = driver.getElement(By.xpath("//span[@id='STORE_AVAIL']").getText());

ID webdriverと私の両方のために、最も速くて簡単なようです。 idはページ上で一意でなければなりません。

CSSは私のところでもう少し調査作業をしますが、webdriverはそれをうまく処理します。

最後に、開発者はビールを購入してアプリケーションに変更しないと、より速く見つけることができます(とにかく、あなたはそれらをテストしています)。 IEのxpathでの検索は非常に遅く、複雑なxpathsを書くことは難しいです。

Xpathも壊れやすいので、domに小さな変更を加えると、xpathが使用できなくなる可能性があります。次に、あなたはxpathをデバッグ/書き直すことになります(それは聞こえるほど楽しいです)。

Firefox用のFirebugとFirePathアドオンを使用して、ロケータを手助けすることをお勧めします。

0

「ページソースを表示」を選択すると、元のHTMLソースのみが表示されます。 ではなく、はWalmanページがそのセクション/要素をどのように更新しているかのように見えるAJAX呼び出しによる変更を示します。このquestionは、より良い説明を提供します。

使用しているドライバに基づいてFirefoxを使用していると仮定すると、ページに移動してCtrl + Shift + Iをクリックしてインスペクタツールを表示できます。興味のある要素を選択し、[Inspector]メニューの[HTML]ボタンをクリックして現在のソースを表示します。

selenium webdriverを使用して要素を取得すると、ページソースに表示される元の値ではなく、現在の値が取得されることに注意してください。したがって、ページソースに表示されるものについて心配する必要はありません。

+0

ああ、私はそれがどのように働いたのか分かりませんでした。ありがとう、私はそれを知っているので、私はもう一度それを試してみます。 – AlbChu

0

私はそれを解決するために、次のコードを使用しています次のHTMLコードsnipet

<li id="NOT_PUT_PREF_STORE" style=""> 
 
<span id="STORE_AVAIL" class="BodyLBoldGrey StockStat">Out of stock</span> <span id="InYourLocal">in your local</span> <span id="storeRollover_2"><span id="STORE_CITY" class="BodyLBoldLtgry VIBSStore1">West Hills</span></span> store<span id="notSelectOptionSOI">.</span> 
 
</li>

と試みたのです。 XPathを使用してスパン要素のツリーを取得し、各要素を解析して要素のテキストを取得します。

driver.navigate().to("file:///C:/Users/abc/Desktop/test.html"); 
    List<WebElement> spanEle = driver.findElements(By.xpath("//li/span")); 
    for (int i = 0; i < spanEle.size(); i++) { 
      System.out.println(spanEle.get(i).getText()); 
関連する問題