Selenium不使用XPath从已经给定的元素中查找near元素

2024-05-26 21:53:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Selenium和定位器基于已经给定的元素选择一个元素,但是我尝试加快这个过程,在这种情况下XPath并不能真正帮助我。你知道吗

这是我正在使用的HTML的结构。你知道吗

<div class="inner-article">
   <h1>
      <a class="name-link">
         Text 1
      </a>
   </h1>
   <p>
      <a class="name-link">
         Text 2
      </a>
   </p>
</div>

现在,我用这些XPath来查找文本1和文本2

text1 = driver.find_element_by_xpath("//a[contains(., 'Text 1')]")
text2 = driver.find_element_by_xpath("//a[contains(., 'Text 1')]/parent::h1/following-sibling::p/a[contains(., 'Text 2')]")

由于XPath有一个明显的延迟,我想知道是否有可能使用一个不同的、比XPath快得多的定位器。我真的想不出什么,因为CSS选择器不是一个选项,我也想不出一种使用其他选择器的方法。你知道吗


Tags: textname文本div元素bydriverlink
2条回答

由于文本为文本1<a>节点始终位于父节点<div class="inner-article">和父节点<h1>内,而文本为文本2<a>节点始终位于父节点<div class="inner-article">和父节点<p>内,因此可以使用以下任一解决方案:

  • xpath对于文本1

    element_text1 = driver.find_element_by_xpath("//div[@class='inner-article']/h1/a[@class='name-link' and contains(., 'Text 1')]")
    
  • xpath对于文本2

    element_text2 = driver.find_element_by_xpath("//div[@class='inner-article']//p/a[@class='name-link' and contains(., 'Text 2')]")- `xpath` for _Text 1_:
    
    element_text1 = driver.find_element_by_xpath("//div[@class='inner-article']/h1/a[@class='name-link' and contains(., 'Text 1')]")
    
  • xpath对于文本2

    element_text2 = driver.find_element_by_xpath("//div[@class='inner-article']//p/a[@class='name-link' and contains(., 'Text 2')]")
    
  • xpath对于文本1文本2(wrt Text 1)

    element_text1 = driver.find_element_by_xpath("//a[contains(., 'Text 1')]")
    element_text2 = driver.find_element_by_xpath("//a[contains(., 'Text 1')]//following::a[contains(., 'Text 2')]") 
    

只需找到该x路径的索引号并加1即可得到下一个相邻的xpath元素。你知道吗

iterlist = iter( driver.get_all_elements_by_xpath ("//a[contains(., 'Text 1')]"))
while xpathFound == False :
    myElement = next(iterlist)       # get the next item
    xpathFound = True if myElement == text1xpath else False

相关问题 更多 >

    热门问题