0

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

<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

3 に答える 3

0

「ページのソースを表示」すると、元の HTML ソースのみが表示されます。AJAX 呼び出しによって行われた変更は表示されません。これは、Walmart ページがそのセクション/要素をどのように更新しているかのように見えます。この質問は、より良い説明を提供します。

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

Selenium webdriver を使用して要素を取得する場合、ページ ソースに表示される元の値ではなく、現在の値が取得されることに注意してください。そのため、ページ ソースに何が表示されるかを気にする必要はありません。

于 2012-04-26T04:07:08.050 に答える
0

次の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>

私はそれを解決するために次のコードを使用しています。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());
于 2014-11-06T04:55:40.143 に答える
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 は問題なく処理します。

最後に、xpath は避けられない場合があります (開発者にビールを買って、アプリケーションをすばやく見つけられるようにアプリケーションに変更するようにうまく依頼しない限り - 結局のところ、とにかくそれらをテストしているのです)。IE での xpath による検索は非常に遅く、複雑な xpath を記述するのは面倒です。

Xpath も壊れやすく、dom を少し変更すると、xpath が使用できなくなる可能性があります。次に、xpath をデバッグ/書き換えることができます (見た目と同じくらい楽しいです)。

私の提案は、Firefox 用の Firebug および FirePath アドオンを使用して、ロケーターを作成することです。

于 2012-04-27T14:24:52.763 に答える