Selenium 的唯一内容标识符:InvalidSelectorError

Unique content identifier with Selenium: InvalidSelectorError

我正在尝试从以下位置获取数据:http://www.boerse-frankfurt.de/de/etfs/ishares+msci+world+momentum+factor+ucits+etf+DE000A12BHF2

我要查找的数据类型位于名为 singlebox list_component 的 类 中。假设我想提取总费用率 (0.30%)。它位于一个名为:right column-datavalue lastColOfRowtd class 中。

但如果我这样做:

dues = driver.find_element_by_class_name("right column-datavalue lastColOfRow ")
expense_ratio = re.search(r"(.{4})(?=%)", dues.text).group(0).encode("utf-8")

我得到:

InvalidSelectorError: Compound class names not permitted

除了这个问题之外,right column-datavalue lastColOfRow 似乎有多个实例,因此它不能用作唯一标识符。

注意:如果用BeautifulSoup而不是Selenium能更好地解决这个问题,请告诉我。

您可以使用 find_element_by_css_selector() 来匹配多个元素 CSS 类 :

dues = driver.find_element_by_css_selector(".right.column-datavalue.lastColOfRow")

但是正如你声称上面的选择器不是唯一的,你可以使用 xpath 来匹配那些 CSS 类 考虑到顺序(我发现这个 xpath 在那个网页上是唯一的) :

xpath = "//td[@class='right column-datavalue lastColOfRow']"
dues = driver.find_element_by_xpath(xpath)

使用 xpath 解决此问题的另一种方法是选择 <td> 元素,该元素跟在另一个包含文本 Gesamtkostenquote :

<td> 之后
xpath = "//td[@class='column-datacaption' and normalize-space(text())='Gesamtkostenquote']/following-sibling::td"
dues = driver.find_element_by_xpath(xpath)