Python 2.7 Selenium Firefox web驱动程序在启动多个web驱动程序实例时冻结
我正在开发一个应用程序,它使用selenium firefox web驱动程序通过芹菜异步任务获取页面截图。我所观察到的是,如果在同时启动多个web驱动程序实例时加载了元素,则在轮询时它会挂起 有没有一种方法可以在超时后强制关闭web驱动程序 或者我还有别的办法来处理这个问题吗?有什么建议吗 相关代码:Python 2.7 Selenium Firefox web驱动程序在启动多个web驱动程序实例时冻结,python-2.7,firefox,selenium,selenium-webdriver,Python 2.7,Firefox,Selenium,Selenium Webdriver,我正在开发一个应用程序,它使用selenium firefox web驱动程序通过芹菜异步任务获取页面截图。我所观察到的是,如果在同时启动多个web驱动程序实例时加载了元素,则在轮询时它会挂起 有没有一种方法可以在超时后强制关闭web驱动程序 或者我还有别的办法来处理这个问题吗?有什么建议吗 相关代码: def open_url_in_virtual_display(self, url, browser, selector=None): browser.get(url) def
def open_url_in_virtual_display(self, url, browser, selector=None):
browser.get(url)
def find_element(browser):
log.info("waiting for selector to be loaded : {0}".format(selector))
found = False
is_stale = True
while is_stale:
try:
ele_found = browser.find_element_by_css_selector(selector).is_displayed()
#it hangs over here.
log.info(" element found flag : {0}".format(ele_found))
if ele_found:
found = True
except StaleElementReferenceException:
is_stale = True
else:
is_stale = False
return found
def wait_until_function_returns_true(browser, fn, timeout):
ret_val = False
try:
ret_val = ui.WebDriverWait(browser, timeout).until(fn)
except TimeoutException as e:
return ret_val
else:
return ret_val
wait_until_function_returns_true(browser, find_element, 10)
self.browser.implicitly_wait(3)
每次收到截图请求时,都会启动此方法。您能分享实际代码并指出挂起的位置吗?谢谢这个问题提出了一个非常棘手的问题,但并没有提供足够的信息发布一个知情的答案。例如,OP有一条评论说“它挂在这里”。自然的解释是下一行挂起。如果
log.info
挂起,这不是问题。然而,可能是元素已经过时了,这对于每次迭代都是如此(是的,这是绝对可能的;例如,所寻找的元素是某种实时时钟)。因此,代码实际上不是“挂起”,而是无限旋转。除了假设之外,没有足够的信息可以做更多的事情。@Louis我不完全理解为什么寻找的元素可能已经过时了。但是,让我们考虑一下,如果它已经过时了,我该如何检测。@ MUITIt,如果浏览器端上有JavaScript代码正在处理DOM,那么在您在脚本中使用该元素时,元素可能会过时。例如,在一些测试表刷新的代码中,我遇到了这种情况。