0

事实上,我可以使用这个 XPath 找到我想要的确切元素:

//table[@class="summary-table"]/tbody/tr/*/*/*/a[contains(@class, "snippet-title")]

我知道这一点是因为我有一个 XPath 插件可以突出显示检测到的元素。

我想把这个元素遍历分成两部分。第一部分返回一个tr单元格列表,第二部分在每个tr单元格中搜索每个a感兴趣的单元格。

返回tr单元格的第一部分已编写并正在运行:

  @property
  def product_elements(self):
    xpath = '//table[@class="summary-table"]/tbody/tr'
    elems = self.driver.find_elements_by_xpath(xpath)
    return elems

但是,我在下面的代码中尝试了各种 XPath 和 css 选择器:

  @property
  def product_names(self):
    xpath = '//a[contains(@class, "lc-snippet-title")]'
    for product_elem in self.product_elements:
      elem = product_elem.find_element_by_css_selector('.lc-snippet-title')
      logging.debug("Found this element {0}".format(
          self.pretty_printer.pformat(elem)))
      yield elem.text

在WebDriver 元素中找不到a我想要的东西。tr

因为里面有多个a标签tr,所以我必须通过class属性找到我想要的那个。

4

2 回答 2

1

我不完全了解 CSS 选择器,但如果你有一个带有 xpath 的 WebElement//table[@class="summary-table"]/tbody/tr并且它有一个 child //a[contains(@class, "lc-snippet-title")],那么下面的代码对我来说就很好:

element = driver.find_element_by_xpath("//table[@class="summary-table"]/tbody/tr")
child = element.find_element_by_xpath(".//a[contains(@class, "lc-snippet-title")]")

整个点在.子元素的 XPath 定位器的开头,它表示它实际上是一个子元素。试试这个

于 2013-11-14T00:18:52.167 回答
0

给定信息:XPath://table[@class="summary-table"]/tbody/tr/ / */a[contains(@class, "snippet-title")]

第1步:

让我们将上面的 XPath 转换为 CSS 选择器以提高性能。

XPath://table[@class="summary-table"]/tbody/tr CSS:css=table.summary-table a.snippet-title > tbody > tr

第2步:然后我们可以通过下面给出的方法找到CSS Count

@财产

def product_elements(self):

css = 'css=table.summary-table > tbody > tr'

elems = self.driver.find_elements_by_by_css_selector(css)

返回元素

@财产

def product_names(self):

for product_elem in self.product_elements:
  elem = product_elem.find_element_by_css_selector('.lc-snippet-title')
  logging.debug("Found this element {0}".format(
      self.pretty_printer.pformat(elem)))
  yield elem.text
于 2014-04-03T06:47:08.030 回答