0

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

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

当我按下页面上的按钮时,div 充满了一系列“正在加载”的 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 等待任意数量的元素加载的方法?

4

2 回答 2

1

你应该给一段时间等待。

WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "glyphicon-chevron-right")))
于 2018-06-12T13:25:04.680 回答
0

看来你快到了。根据您共享以等待特定<div>元素可见的 HTML,您可以使用以下解决方案:

WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element_by_xpath("//div[@class='user-list ng-scope']//i[@class='glyphicon glyphicon-chevron-right']")))
于 2018-06-12T14:32:03.283 回答