我目前正在amazon.es网页上尝试Selenium Webdriver。我已成功浏览网页,按类查找元素(准确地说搜索项按钮)。
问题在于我试图获取网页的价格。可以找到网页here(只需查看Balon Baloncesto =>篮球)。当我尝试按类搜索元素时,确切地说:
<span class="a-size-base a-color-price s-price a-text-bold">EUR 33,64</span>
Selenium找不到它,给出了未找到的元素错误。这是Java实现。 nav
是浏览器对象。
//value = a-size-base a-color-price s-price a-text-bold
elemList = nav.findElements(By.className(value));
//elemList appears to be empty after this
网页上没有任何可能影响我的iFrame,所以我不能很好地解决问题所在。任何帮助都会很感激。
祝你好运
答案 0 :(得分:1)
By.className(value)
具有多个类的元素的特定行为。我无法在JS绑定中找到此行为,但这里是Java中相同功能的摘录。
如果一个元素有多个类,那么这将匹配每个类。例如,如果值为“one one onone”,则类名“one”和“two”将匹配。
因此,当实际的类属性为class="a-size-base a-color-price s-price a-text-bold"
时,只有以下By.className
标识符匹配。
By.className("a-size-base")
By.className("a-color-price")
By.className("s-price")
By.className("a-text-bold")
但请注意,我希望其中一个或多个能够另外识别屏幕上您不想要的其他对象。
如果您想匹配类的 ALL ,请尝试使用xpath检查@class
属性是否包含您的值。
或者(这通常比xpath执行得更好)使用将所有类名链接在一起的css选择器。 CSS选择器中的每个类名都应以.
By.css(".a-size-base.a-color-price.s-price.a-text-bold")
答案 1 :(得分:0)
此代码可能对您有所帮助:
WebDriver nav = new FirefoxDriver();
nav.get("https://www.amazon.es/s/ref=nb_sb_noss/261-8047486-3232562?__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&url=search-alias%3Daps&field-keywords=Balon+Baloncesto&rh=i%3Aaps%2Ck%3ABalon+Baloncesto");
List<WebElement> elements = nav.findElements(By.xpath("//span[contains(@class,'a-size-base a-color-price s-price a-text-bold')]"));
for(WebElement element: elements) {
System.out.println(element.getText());
}