selenium:在WebDriver元素中定位元素

时间:2013-11-08 16:32:20

标签: python selenium-webdriver

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

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

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

我想将此元素遍历分为两部分。首先 part返回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

并且没有任何工作可以在a内找到我想要的tr WebDriver元素。

由于a中有多个tr标记,我必须找到 一个我想要的class属性。

2 个答案:

答案 0 :(得分:1)

我不完全了解CSS选择器,但是如果你有一个带有xpath //table[@class="summary-table"]/tbody/tr的WebElement并且它有一个子//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定位符开头的.中,表示它实际上是一个子元素。试试这个

答案 1 :(得分:0)

鉴于信息: XPath:// table [@class =" summary-table"] / tbody / tr / / / * / a [contains(@class," snippet-title& #34)]

第1步:

让我们将上面的XPath转换为CSS Selector for Performance。

的XPath://表[@class ="总结表"] / 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
相关问题