Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python的SeleniumWebDriver(Selenium2)中的显式等待和隐式等待问题_Python_Selenium Webdriver - Fatal编程技术网

使用Python的SeleniumWebDriver(Selenium2)中的显式等待和隐式等待问题

使用Python的SeleniumWebDriver(Selenium2)中的显式等待和隐式等待问题,python,selenium-webdriver,Python,Selenium Webdriver,我必须和一些非常慢的代理一起工作,有时会被卡住。因此,我正试图找到解决方案/解决办法,我的问题是: from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait browser = webdriver.Firefox() browser.get("http://whateversite.com") element = browser.find_element_by_id("elem

我必须和一些非常慢的代理一起工作,有时会被卡住。因此,我正试图找到解决方案/解决办法,我的问题是:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

browser = webdriver.Firefox()
browser.get("http://whateversite.com")

element = browser.find_element_by_id("element")
element.click() # go to page http://whateversite.com/page.html

new_element = browser.find_element_by_id("newElement")
无论您是否设置了
browser.implicitly\u wait(30)
或使用
new\u element=WebDriverWait(browser,30)。直到(lambda browser:browser.find\u element\u by\u id(“newElement”))
它只是卡住了,有时长达数小时。它似乎在等待那一页
http://whateversite.com/page.html
完全加载,在某些极端情况下可能需要数小时


我应该如何避免这种情况?

尝试使用不稳定负载策略。 例如
FirefoxProfile=newfirefoxprofile();
profile.setPreference(“webdriver.load.strategy”、“不稳定”);
WebDriver=newfirefoxdriver(配置文件);
` 您可以在以下网址找到更多信息:


也可以试试这个.driver.manage().timeouts().pageLoadTimeout(30,TimeUnit.SECONDS)

我还没有看到这个问题的好答案,所以我想我应该给出我的解决方案。我在使用selenium时遇到过很多次这种情况,尽管我使用的是hack-y,但我使用expect。expect是一种非常简单的基于tcl的语言,它允许您轻松地生成其他程序,等待输入或超时并执行某些操作。因此基本上可以代替using sel的waits,我创建了一个使用python的sleep等待的函数:

import time

def wait(waittime=30):
  print 'kick'
  time.sleep(waittime)

..
然后我创建run.exp:

set timeout 30
set try 0

while 1 {
    spawn /usr/bin/python test.py
        while 1 {
            expect "kick" {exp_continue}
            timeout {
                if {$try > 5} {
                    exit
                }
                incr try
            }
        }
    }
}

这就是全部,它通常工作得非常好,基本上如果程序挂起,它会尝试重新启动。尝试5次后,它会自行终止。您还可以有更多的控件来控制如何在不同的状态下重新启动程序等。

您实际使用的浏览器是什么?如果使用Firefox或Chrome,会有什么不同吗?您的代码看起来像这样应该可以。当你手动访问这些网站时会发生什么?@H.Dunlop:Firefox,对不起,我刚刚更正了代码。可能是重复的,你真的可以提供导致问题的页面吗,还是每个页面都可以?Webdriver在页面完全加载之前不会返回。一些解决方案通常是禁用与第三方相关的垃圾当您使用selenium来避免这种情况时,请将此作为一个示例:
import time
是此time函数与selenium Python一起使用所必需的