错误消息:无法找到元素。可能是什么问题? Python 3.7,Selenium 3.141.0

问题描述 投票:0回答:2

当使用selenium使用Xpath查找元素标记时,它使用从chrome复制的xpath为该元素工作,这是为了测试它是否正常工作。由于每次打开网页时id元素都会改变,我知道这会导致我的网页自动化程序出错,现在来自同一个标签我使用的是class元素,因为每次打开网页都不会改变但是Selenium根本找不到那个元素。当我将xpath中的元素更改为类时,其相对名称来自我最初从webbroswer复制和测试的xpath。可能是什么问题?

以下是我想要访问的html源代码和Xpath的示例:

<div class="popover fade right in" role="tooltip" id="popover784483" style="top: -9px; left: 328.5px; display: block;">
    <div class="arrow" style="top: 88.9423%;"></div>
    <h3 class="popover-title">
        <font style="vertical-align: inherit;">
            <font style="vertical-align: inherit;">Member details</font>
        </font>
    </h3>
    <div class="popover-content">
        <img class="center-block" src="http://api.vdarts.net:8080/picture/portrait/default.png" style="max-width:200px;height:auto;">
        <hr>
        <font style="vertical-align: inherit;">
            <font style="vertical-align: inherit;">Account: CapitainJack </font>

Xpath正式使用但ID更改:

//*[@id="popover784483"]/div[2]/font[1]/font

要使用的Xpath:

//*[@class="popover fade right in"]/div[2]/font[1]/font
python python-3.x selenium selenium-webdriver webautomation
2个回答
0
投票

有很多方法可以解决这个问题。

您可以匹配部分文本内容Xpath

//*[contains(text(), 'Account')]

您可以使用Img标签和以下字体

(//img//following::font)[2]

-1
投票

我建议你改用CSS选择器。

复合类名称是指元素具有由空格分隔的多个类。例如。 <div class="class1 class2 class3"></div>

如果要选择包含所有3个类的元素(以任何顺序),您可以使用:

element = driver.find_element_by_css_selector(".class1.class2.class3")

如果你想使用XPath,我发现以下方法有效(使用与上面相同的例子):

browser.find_elements_by_xpath("//*[contains(concat(' ',@class,' '),' class1 ') and contains(concat(' ',@class,' '),' class2 ') and contains(concat(' ',@class,' '),' class3 ')]")

注意:您可以使用不同的布尔运算符来过滤掉某些类名(例如'和''而不是'等)

© www.soinside.com 2019 - 2024. All rights reserved.