我尝试使用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等待加载任意数量的元素?
答案 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']")))