自定义is_element_present执行缓慢

0 投票
2 回答
709 浏览
提问于 2025-04-16 08:31

我在一个方法的内部又调用了另一个方法:

for i in range(60):
    try:
        if sel.is_element_present("//div[@id='result']/form[3]/strong/div/button"): break
    except: pass
    time.sleep(1)

这个方法执行大约需要5秒钟。

但是在网站上没有任何变化,然后我执行了这一行:

self.WaitForElement(u"//div[@id='result']/form[3]/strong/div/button")     


def WaitForElement(self,name):
    for i in range(60):
        try:
            if sel.is_element_present(name): break
        except: pass
        time.sleep(1)

结果却要将近30秒,这就很奇怪了。

你们有什么想法吗?

2 个回答

0

这是我对is_element_present方法的理解:

   def is_element_present(self, how, what):
    try: self.driver.find_element(by=how, value=what)
    except NoSuchElementException, e: return False
    return True

因为这个方法已经有了try...except的结构,所以你不需要再把它包裹在另一个try...except里。is_element_present方法只会返回真(True)或假(False),所以你代码里的except: pass部分可能永远不会被执行。与其这样,不如直接用if语句。

我还觉得你代码里有个拼写错误(应该是"self"而不是"sel")。

0

快速看了一下你的代码,我发现你在第一个例子中定义了一个普通字符串,而在第二个例子中定义了一个unicode字符串。

撰写回答