首页 > 解决方案 > 硒中的元素过时或不可点击错误

问题描述

作为预警,我对编写代码非常陌生,只是将其作为一种爱好,所以如果我的术语不正确,我深表歉意。

我编写了一些代码来导航到网页,然后一遍又一遍地刷新该页面,直到出现某个元素(当前是一个类),然后单击该类。我不需要网站导航部分的帮助(该网站上的其他问题和答案对于找出该过程中的症结非常有帮助),但是当元素最终出现并且 selenium 尝试单击该元素时,我经常收到错误消息. 我看到一些不同的错误消息,包括:

这是代码的相关部分:

i = 0
while i == 0:
    if len(driver.find_elements_by_class_name("start")) == 0:
        driver.find_element_by_class_name("active.day").click() #this just refreshes the page
        time.sleep(0.1)
        continue
    else:
        break
driver.find_elements_by_xpath("//*[@class='start' and starts-with(text(), '7')]")[0].click()

这是我尝试单击的“开始”元素出现之前网站相关部分的示例:

<div id="content" class="row">

    <ul id="times" class="col-md-12"> 

        <li class="time empty muted">

            <h1>No tee times available</h1>

            <p>Booking for 8/09/2020 starts at 7:00pm (PDT)</p>

        </li>

    </ul>

</div>

这是我尝试单击的“开始”元素出现后 HTML 相关部分的示例:

  <div class="reserve-time">
    
    <div class="pull-left">

        <h4 class="start">7:38am</h4>
        
        <div class="holes" style="margin-right: 0.5em;">

            <i class="glyphicon glyphicon-flag"></i> <span class="holes">18</span>

        </div>
        
        <div class="spots">
            
            <i class="glyphicon glyphicon-user"></i> <span class="spots">3</span>
        
         </div>
        
    </div>

    <div class="pull-right">

        <div class="price">
            
            <span title="Green Fee">

            <i class="icon-golf-ball-tee" style="font-size: 1em;"></i>

            $33.00

        </span>
            
        </div>

    </div>
    
</div>

提前感谢您的帮助!

PS - 我希望 HTML 在帖子中显示正常。我无法将 HTML 复制到帖子中并显示出来。

标签: pythonhtmlselenium

解决方案


Selenium 无法单击它看不到的对象 - 就像您无法单击网页上看不到的东西一样。在调试 Selenium 代码时,我所做的是在崩溃的行之前添加一个“睡眠”10 分钟。然后,在打开的浏览器中,我查看我尝试单击的元素是否可访问。

在您的情况下,听起来好像有一个加载屏幕遮住了它。我建议不要使用显式休眠 ( time.sleep(0.1)),而是webdriver.implicitly_wait(10)等待 10 秒以使元素可见。如果这不起作用,请考虑上面的调试方法,您可以在浏览器中实际尝试一下。


推荐阅读