小编Rag*_*rok的帖子

Python Selenium 等待多个元素加载

我有一个列表,它是由 AJAX 动态加载的。首先,在加载时,它的代码是这样的:

<ul><li class="last"><a class="loading" href="#"><ins>&nbsp;</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)

python testing selenium automated-tests selenium-webdriver

9
推荐指数
2
解决办法
1万
查看次数