无法按类硒亚马逊找到元素

J. *_*ron 1 javascript selenium selenium-chromedriver

我目前正在 amazon.es 网页上尝试 Selenium Webdriver。我已成功浏览网页,按类查找元素(准确地说是搜索项按钮)。

问题是当我尝试获取网页的价格时。该网页可以在这里找到(只需查找 Balon Baloncesto => 篮球)。当我尝试按类搜索元素时,这正是:

<span class="a-size-base a-color-price s-price a-text-bold">EUR 33,64</span>
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

网页上没有任何 iFrame 会影响我,所以我不太清楚问题出在哪里。任何帮助将不胜感激。

此致

Bri*_*ian 6

By.className(value)对于具有多个类的元素具有特定的行为。我找不到 JS 绑定中记录的此行为,但这里是 Java 中相同功能的摘录。

来自文档

如果一个元素有多个类,那么这将与每个类匹配。例如,如果值为“one Two 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")
Run Code Online (Sandbox Code Playgroud)

但请注意,我希望其中的一个或多个能够额外识别屏幕上您不想要的其他一些对象。

如果您想匹配所有类,请尝试使用 xpath 来检查@class属性是否包含您的值。

或者(这通常会比 xpath 表现更好)使用将所有类名链接在一起的 css 选择器。CSS 选择器中的每个类名前面应带有.

By.css(".a-size-base.a-color-price.s-price.a-text-bold")
Run Code Online (Sandbox Code Playgroud)