我使用PhantomJS作为webdriver来加载一些网址。通常,程序运行正常。但是,它很多地挂在driver.get(url)
上,我想知道我能做些什么呢?
driver = webdriver.PhantomJS(executable_path= path_to_phantomjs_exe, service_log_path= path_to_ghostdriver_log)
driver.get(url)
它会挂起试图永远加载某个网址。但如果我再试一次,它可能会奏效。 webdrivers / phantomJS真的那么不稳定吗?我猜最后的办法是不断调用driver.get(url)
直到它最终加载,但这真的是必要的吗?谢谢!
编辑:它似乎只在从列表中加载第一个链接时挂起。然而,它最终会加载,但几分钟后。其余的链接在几秒钟内加载。任何帮助都会很棒。
答案 0 :(得分:2)
我在这篇文章中回答了这个确切的问题:Geb/Selenium tests hang loading new page但是在这里复制了它,因为我发现这个问题比较老了。
我希望你能找到一种方法在你的代码中实现它,但是当我遇到与PhantomJS类似的情况时,这对我有用。
我跟踪它是挂在driver = webdriver.PhantomJS()
# set timeout information
driver.set_page_load_timeout(15)
电话上,对我来说这是说某些事情没有通过或者webdriver根本就没有 - 出于某种原因 - 将负载成功命令返回给驱动程序,允许脚本继续。
所以,我添加了以下内容:
driver.get()
我在5(秒)的时间进行了测试,它没有等待足够长的时间,也没有任何事情发生。 15秒对我很有用,但这可能是你应该测试的东西。
除此之外,每当webdriver的选项超时时,我也会创建一个循环,以便.get()
可以尝试重新发送while finished == 0:
try:
driver.get(url3)
finished = 1
except:
sleep(5)
命令。实现try / except堆叠场景,我能够接近这个:
except TimeoutException as e:
#Handle your exception here
print(e)
我见过一个除句柄:
data1
但我对此毫无用处。不过,了解如何捕获特定异常可能会很好。
有关超时的更多选项,请参阅此解决方案:在selenium webdriver.PhantomJS上设置超时
答案 1 :(得分:0)
所以我遇到了同样的问题:
driver = webdriver.PhantomJS(executable_path= path_to_phantomjs_exe, service_log_path= path_to_ghostdriver_log)
driver.get(url)
所以我将service_log_path更改为:
service_log_path=os.path.devnull
这似乎对我有用!!!