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 lastColOfRow
的 td 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)
我正在尝试从以下位置获取数据:http://www.boerse-frankfurt.de/de/etfs/ishares+msci+world+momentum+factor+ucits+etf+DE000A12BHF2
我要查找的数据类型位于名为 singlebox list_component
的 类 中。假设我想提取总费用率 (0.30%)。它位于一个名为:right column-datavalue lastColOfRow
的 td 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)