【问题标题】:Cannot find second element in Selenium even though it exists即使存在,也无法在 Selenium 中找到第二个元素
【发布时间】:2023-04-01 23:51:01
【问题描述】:

我有一个脚本,它会查找体育课名称,然后单击相应的按钮。当有一个同名的体育课时,它非常有效。但是当有两个时,我无法选择第二个。

这是脚本:

className = 'Zumba'


WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.XPATH, "//p[contains(text(),'" + className + "')][2]/parent::div/parent::a[@onclick]")))

如果我将 [2] 更改为 [1],那么它会起作用并选择第一个元素,但 [2] 不会选择第二个。

第一个元素:

<div class="col-xs-12 col-sm-3 col-md-2 class column1" style="">

<a href="javascript:void(0)" style="text-decoration:none;" onclick="getClassDetails('265136', '614617')" class="studio">    <div>
        <div class="triangle"></div>
        <p style="padding:10px 25px 0 25px;font-size:13px">Zumba</p>
        <p style="font-size:12px;text-align:left;float:left;padding:0;margin:0;">
            350 cals
        </p>
        <p style="font-size:12px;text-align:right;float:right;padding:0;margin:0;">
            45 mins
        </p>
    </div>
                    <div style="clear: both; font-size: 11px; text-align: center; padding: 0px; margin:-5px 5px 5px; background-color: #C52B2B; box-shadow: 0px 2px 2px -1px rgba(0, 0, 0, 0.55) inset;">Fully Booked</div>
                        
</a>
            
</div>

第二个元素:

<div class="col-xs-12 col-sm-3 col-md-2 class column1" style="">
                
<a href="javascript:void(0)" style="text-decoration:none;" onclick="getClassDetails('265135', '614617')" class="studio">    <div>
        <div class="triangle"></div>
        <p style="padding:10px 25px 0 25px;font-size:13px">Zumba</p>
        <p style="font-size:12px;text-align:left;float:left;padding:0;margin:0;">
            350 cals
        </p>
        <p style="font-size:12px;text-align:right;float:right;padding:0;margin:0;">
            45 mins
        </p>
    </div>
                    <div style="clear: both; font-size: 11px; text-align: center; padding: 0px; margin:-5px 5px 5px; background-color: #C52B2B; box-shadow: 0px 2px 2px -1px rgba(0, 0, 0, 0.55) inset;">Fully Booked</div>
                        
</a>

<a href="javascript:void(0)" style="text-decoration:none;" onclick="getClassDetails('265185', '614617')" class="spinstudio">    <div>
        <div class="triangle"></div>
        <p style="padding:10px 25px 0 25px;font-size:13px">Indoor Cycling </p>
        <p style="font-size:12px;text-align:left;float:left;padding:0;margin:0;">
            400 cals
        </p>
        <p style="font-size:12px;text-align:right;float:right;padding:0;margin:0;">
            45 mins
        </p>
    </div>
                    <div style="clear: both; font-size: 11px; text-align: center; padding: 0px; margin: -5px 5px 5px; background-color: #2d7698; box-shadow: 0px 2px 2px -1px rgba(0, 0, 0, 0.55) inset;">Join Waiting List</div>
                        
</a>
                                
</div>

欢迎任何帮助解决问题。

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    试试

    WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.XPATH, "(//p[contains(text(),'" + className + "')])[2]/parent::div/parent::a[@onclick]")))
    

    诀窍是在选择第 n 个节点之前将(//p[contains(text(),'" + className + "')]) 括起来。

    【讨论】:

    • 我想知道"(//p[contains(text(),'" + className + "')]/parent::div/parent::a[@onclick])[2]" 是否也可以工作?
    • 应该的。 f'(//a[.//p[contains(., "{className}")]])[2]' 也应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多