我有一个列表,它是由 AJAX 动态加载的。首先,在加载时,它的代码是这样的:
<ul><li class="last"><a class="loading" href="#"><ins> </ins>????????...</a></li></ul>
Run Code Online (Sandbox Code Playgroud)
当列表被加载时,所有的 li 和 a 都被改变了。而且总是超过1里。像这样:
<ul class="ltr">
<li id="t_b_68" class="closed" rel="simple">
<a id="t_a_68" href="javascript:void(0)">Category 1</a>
</li>
<li id="t_b_64" class="closed" rel="simple">
<a id="t_a_64" href="javascript:void(0)">Category 2</a>
</li>
...
Run Code Online (Sandbox Code Playgroud)
我需要检查列表是否已加载,所以我检查它是否有几个 li。
到目前为止,我尝试过:
1) 自定义等待条件
class more_than_one(object):
def __init__(self, selector):
self.selector = selector
def __call__(self, driver):
elements = driver.find_elements_by_css_selector(self.selector)
if len(elements) > 1:
return True
return False
Run Code Online (Sandbox Code Playgroud)
try:
query = WebDriverWait(driver, 30).until(more_than_one('li'))
except:
print "Bad crap"
else:
# Then load ready list
Run Code Online (Sandbox Code Playgroud)
2)基于find_elements_by的自定义函数
def wait_for_several_elements(driver, selector, …Run Code Online (Sandbox Code Playgroud)