无法让硒找到元素
Can't get Selenium to find element
我正在尝试在 yelp.com 上查找元素。我已尝试使用 xPath
和 ClassNames
,但似乎无法获取每个商家的星级评分。
这是星级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);
我想 return 4.5
这样我就可以将它保存到另一个文件中。我正在使用 C# 和 Visual Studio.
如果你只有一个结果,我想你可以做到这一点。如果您需要查找特定评级,也可以根据需要自定义它:
// 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());
或者,如果您想遍历所有元素:
// 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()
应该是return第一个字,也就是4.5。注意:您需要一个 using System.Linq;
语句才能使用 First()
,或者如果您最终使用 ToList()
.
您可以像这样查找和过滤商家(在 Java 中):
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
}
}
我正在尝试在 yelp.com 上查找元素。我已尝试使用 xPath
和 ClassNames
,但似乎无法获取每个商家的星级评分。
这是星级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);
我想 return 4.5
这样我就可以将它保存到另一个文件中。我正在使用 C# 和 Visual Studio.
如果你只有一个结果,我想你可以做到这一点。如果您需要查找特定评级,也可以根据需要自定义它:
// 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());
或者,如果您想遍历所有元素:
// 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()
应该是return第一个字,也就是4.5。注意:您需要一个 using System.Linq;
语句才能使用 First()
,或者如果您最终使用 ToList()
.
您可以像这样查找和过滤商家(在 Java 中):
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
}
}