Python selenium不会等待加载

时间:2018-06-12 12:59:31

标签: python html selenium

我尝试使用selenium来解析以下html页面:

<html>
    <button>Press me</button>
    <body>
        <div class="user-list ng-scope"></div>
    </body>
</html>

当我按下页面上的按钮时,div会被一系列&#34; loading&#34;的div:

<html>
    <button>Press me</button>
    <body>
        <div class="user-list ng-scope">
            <div class="panel">
                 <div class="panel-body">
                     <i class="glyphicon.glyphicon-cog.spinner.ng- 
                      scope::before"></i>
                 </div>
            </div>
            <div class="panel">
                 <div class="panel-body">
                     <i class="glyphicon.glyphicon-cog.spinner.ng- 
                      scope::before"></i>
                 </div>
            </div>
        </div>
    </body>
</html>

加载<div class="panel"></div>'s后,html如下所示:

<html>
    <button>Press me</button>
    <body>
        <div class="user-list ng-scope">
            <div class="panel">
                 <div class="panel-body">
                     <i class="glyphicon glyphicon-chevron-right"></i>
                 </div>
            </div>
            <div class="panel">
                 <div class="panel-body">
                     <i class="glyphicon glyphicon-chevron-right"></i>
                 </div>
            </div>
        </div>
    </body>
</html>

请注意<i></i>类已更改。基本上我想在Python的selenium模块中使用一个方法来等待<div class="panel"></div>'s加载。我的第一个想法是等待<i></i>类从glyphicon.glyphicon-cog.spinner.ng-scope :: before更改为glyphicon-chevron-right,这表示div已加载。我使用以下python代码行来执行此操作:

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

driver.wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "glyphicon-chevron-right")))

不幸的是,这似乎不起作用,因为程序在div完全加载之前终止。有没有人知道如何利用Python的selenium等待加载任意数量的元素?

2 个答案:

答案 0 :(得分:1)

你应该等一段时间等待。

WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "glyphicon-chevron-right")))

答案 1 :(得分:0)

好像你差不多了。根据您共享的HTML等待特定<div>元素可见,您可以使用以下解决方案:

WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element_by_xpath("//div[@class='user-list ng-scope']//i[@class='glyphicon glyphicon-chevron-right']")))