【问题标题】:Document complete in RSelenium在 RSelenium 中完成的文档
【发布时间】:2017-01-26 03:39:47
【问题描述】:

而不是使用:

Sys.sleep(5)

要等待 dom 加载是否有任何等待要等到这个命令

document.readyState

给出结果"complete" 这样dom就准备好了

【问题讨论】:

    标签: r selenium dom rselenium


    【解决方案1】:

    Selenium 已经通过 timeouts 方法集实现了对 document.readyState 的轮询。 RSelenium 具有 setTimeout 方法。增加 page load 的超时应该会导致 Selenium 允许更多时间来完成操作。

    当网页没有完成加载时,问题就出现了。一些网页不断加载延迟调用自己。例如,在这种情况下,您可以检查 DOM 中是否存在元素。

    How I can check whether a page is loaded completely or not in web driver?

    Selenium WebDriver : Wait for complex page with JavaScript(JS) to load

    进一步讨论。使用RSelenium,您当然可以运行 JavaScript,例如

    remDr$executeScript("return document.readyState == 'complete';")
    

    对于现代网页,检测页面加载何时被视为已完成的问题可能会出现问题,并且解决方案因具体情况而异。

    【讨论】:

    • 谢谢。实际上有一些 ajax 调用,我无法预测它们需要多长时间。如果我使用这个remDr$executeScript("return document.readyState == 'complete';"),代码会等到完成,否则我会遇到异常问题?
    • 如果 AJAX 调用暴露数据,您可以检查该数据是否存在。有一个异步版本的 execute 方法。它会一直等到它的回调方法被执行。您可以根据您的情况将其与适当的 JavaScript 一起使用,以等待调用完成。您还需要将异步脚本的超时设置为适当的值。
    • 我尝试使用setTimeout(type = "page load", milliseconds = 10000),我已经加载了 rselenium 库,但它提到了Error: could not find function "setTimeout"
    • 希望它在那里 github.com/ropensci/RSelenium/blob/master/R/remoteDriver.R#L329 。您是否将其称为远程驱动程序类的方法?例如remDr$setTimeout(type = "page load", milliseconds = 10000)
    • 谢谢。是的。但不幸的是,这并不适用于所有情况。 Selenium 有时不会加载整个页面并给出一般异常并且我的程序停止。
    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多