2017-02-14 7 views
1

yelp.comで要素を検索しようとしています。私はxPathClassNamesを使用しようとしましたが、各ビジネスの星評価を取得することができないようです。ここで要素を見つけるためにSeleniumを取得できません

は星の評価のHTMLである:ここで

<div class="i-stars i-stars--regular-4-half rating-large" title="4.5 star rating"> 
    <img class="offscreen" height="303" src="https://s3-media1.fl.yelpcdn.com/assets/srv0/yelp_design_web/41341496d9db/assets/img/stars/stars.png" width="84" alt="4.5 star rating"> 
</div> 

は、格付けを取得するために私のコードです:

var starRating = driverGC.FindElement(By.LinkText("title")); 
MessageBox.Show(starRating.Text); 

私はそれが4.5を返すしたいと思いますので、私は別のファイルにそれを保存することができます。私はC#とVisual Studioを使用しています。

+2

あなたはこれまでに何をしようとしたのですか? – Flott

+2

ようこそ。検索したいHTML要素と要素を見つけるために書いたコードの両方をあなたのコードに投稿してください。あなたの問題の可能性がある限り、あなたの投稿の読者が理解できるように助けを借りることなく、助けを得ることは非常に困難です。 – Christos

+0

これまでのところ、私はこれを見つけるためのコードとしてこれを持っています。var starRating = driverGC.FindElement(By.LinkText( "title"));私はXPath、ClassName、IDを使ってみましたが、正しい要素を見つけることができません。特定の文字列の要素を検索してより具体的にすることができる方法はありますか? –

答えて

0

結果が1つしかない場合は、これを行うことができます。である、最初の単語を返すべき

// The rating element 
IList<IWebElement> starRatings = driverGC.FindElements(By.ClassName("i-stars")); 
// The title attribute on the rating element is something like '4.5 star rating' 
// which I think is what you're trying to find. 
foreach (IWebElement elem in starRatings) 
{ 
    MessageBox.Show(elem.GetAttribute("title")Split(' ').First()); 
} 

Split(' ').First():あなたはすべての要素をループする場合は代わり

// The rating element 
var starRating = driverGC.FindElement(By.ClassName("i-stars")); 
// The title attribute on the rating element is something like '4.5 star rating' 
// which I think is what you're trying to find. 
MessageBox.Show(starRating.GetAttribute("title").Split(' ').First()); 

:あなたは、特定の格付けを見つける必要がある場合は、必要に応じてカスタマイズ4.5。注:First()を使用する場合、またはToList()を使用する場合は、using System.Linq;声明が必要です。この(Javaで)のような

+0

これは最高のように見えますが、これを追加しましたが、現在、読み取り専用コレクションをリストに変換する際にエラーが発生しています。すべての修正? –

+0

これは 'List 'の代わりに 'IList 'でなければなりません。私は私の答えを更新します。代わりに、リスト starRatings = driver.GC.FindElements(By.ClassName( "I-stars"))ToList();を実行することもできますが、インタフェースに対してプログラミングするのが良い方法です。 – mrfreester

+0

また、最初の単語を取得するためのコードをいくつか追加しました。この例では '4.5 'にする必要があります。私はこの資料をテストしていないので、あなたが別のエラーに遭遇した場合にお知らせください:) – mrfreester

0
あなたは見つけることができます

とフィルタ企業:

List<WebElement> starRatings = driver.findElements(By.xpath("//div[contains(@title, 'star rating')]")); 
List<WebElement> businesses = driver.findElements(By.xpath("//div[contains(@title, 'star rating')]/preceding::a[1]/span")); 
for(int i = 0; i < starRatings.size(); i++) 
{ 
     String rating = starRatings.get(i).getAttribute("title"); 
     rating = rating.split(" ")[0]; 
     DecimalFormat df = new DecimalFormat("#.#"); 
     Double d = Double.valueOf(rating); 
     rating = df.format(d); 
     d = Double.valueOf(rating); 
     if(d <= 3) 
     { 
      String Businessname = businesses.get(i).getText(); 
      //Write variable Businessname & rating into file 
     } 
} 
+0

C#でそれを行う方法を知っていますか?私はそれを追加すると少なくとも8時間かかる。 –

関連する問題