Selenium的唯一内容标识符:InvalidSelectorError

时间:2015-06-03 09:59:16

标签: python-2.7 selenium beautifulsoup

我试图从以下网址获取数据:http://www.boerse-frankfurt.de/de/etfs/ishares+msci+world+momentum+factor+ucits+etf+DE000A12BHF2

我要查找的数据类型位于名为singlebox list_component的类中。让我们说我想提取总费用率(0.30%)。它位于名为td class的{​​{1}}中。

但如果我这样做:

right column-datavalue lastColOfRow

我明白了:

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更好地解决了这个问题,请告知我们。

1 个答案:

答案 0 :(得分:1)

您可以使用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>文本<td>之后的Gesamtkostenquote元素:

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