硒无需使用XPath就可以从已给定的元素中找到Near元素

时间:2018-11-04 06:08:28

标签: python selenium selenium-webdriver xpath webdriver

我正在尝试使用Selenium和定位器根据已给定的元素选择一个元素,但是我正在尝试加快过程,在这种情况下XPath并没有真正帮助我。

这是我正在使用的HTML的结构。

reMsg.Font.Name := labMsg.Font.Name;
reMsg.Font.Charset := labMsg.Font.Charset;

截至目前,我正在使用这些XPath查找文本1和文本2

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

由于XPath有明显的延迟,我想知道是否有可能使用XPath以外的其他更快的定位器。我真的什么也没想到,因为CSS选择器不是一个选择,我也想不出使用其他选择器的方法。

2 个答案:

答案 0 :(得分:0)

只需找到该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

答案 1 :(得分:0)

作为文本为{strong>文本1 的{ general : { splash : { "title" : "lorem title", "description" : "lorem description", "link" : { "text" : "click me" } } } } 节点,始终在父父节点<a>和父节点<div class="inner-article"><h1>节点之内文本为文本2 的文本始终位于大父节点<a>和父节点<div class="inner-article">中,则可以使用以下任一解决方案:

    文本1的
  • <p>

    xpath
  • 文本2的
  • 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
  • element_text2 = driver.find_element_by_xpath("//div[@class='inner-article']//p/a[@class='name-link' and contains(., 'Text 2')]") 表示文本1 文本2(wrt文本1)

    xpath