Selenium webdriver driver.get(url)有时挂起......

Jam*_*eux 6 python selenium phantomjs selenium-webdriver

我正在使用PhantomJS作为webdriver加载一些网址.通常,程序运行正常.然而,它driver.get(url)很多,我想知道我能做些什么呢?

driver = webdriver.PhantomJS(executable_path= path_to_phantomjs_exe, service_log_path= path_to_ghostdriver_log)
driver.get(url)
Run Code Online (Sandbox Code Playgroud)

它会挂起试图永远加载某个网址.但如果我再试一次,它可能会奏效.webdrivers/phantomJS真的那么不稳定吗?我猜最后的手段是不断打电话,driver.get(url)直到它最终加载,但这真的是必要的吗?谢谢!

编辑:它似乎只在从列表中加载第一个链接时挂起.然而,它最终会加载,但几分钟后.其余的链接在几秒钟内加载.任何帮助都会很棒.

ntk*_*tk4 5

我已经在这篇文章中回答了这个确切的问题:Geb/Selenium 测试挂起加载新页面,但复制到这里,因为我看到这个问题更旧。

我希望您能找到一种方法将其实现到您的代码中,但是当我遇到类似 PhantomJS 挂起的情况时,这对我有用。

我追踪到它挂在了一个driver.get()电话上,对我来说,这是在说某些事情没有通过,或者 webdriver 没有 - 由于某种原因 - 将加载成功命令返回给驱动程序,允许脚本继续。

所以,我添加了以下内容:

driver = webdriver.PhantomJS()

# set timeout information
driver.set_page_load_timeout(15)
Run Code Online (Sandbox Code Playgroud)

我已经在 5(秒)的时间内测试过它,但它等待的时间不够长,什么也不会发生。15 秒对我来说效果很好,但这也许是你应该测试的东西。

最重要的是,每当 webdriver 有超时选项时,我还创建了一个循环,以便它driver.get()可以尝试重新发送.get()命令。实施 try / except 堆叠场景,我能够解决这个问题:

while finished == 0:
    try:
        driver.get(url3)
        finished = 1
    except:
        sleep(5)
Run Code Online (Sandbox Code Playgroud)

我见过一个除了句柄:

except TimeoutException as e:
    #Handle your exception here
    print(e)
Run Code Online (Sandbox Code Playgroud)

但我没有用这个。不过,知道如何捕获特定异常可能会很好。

有关超时的更多选项,请参阅此解决方案:Setting timeout on selenium webdriver.PhantomJS


小智 3

所以我遇到了同样的问题:

driver = webdriver.PhantomJS(executable_path= path_to_phantomjs_exe, service_log_path= path_to_ghostdriver_log)
driver.get(url)
Run Code Online (Sandbox Code Playgroud)

所以我将 service_log_path 更改为:

service_log_path=os.path.devnull
Run Code Online (Sandbox Code Playgroud)

这似乎对我有用!