在 RSelenium 中完成的文档
Posted
技术标签:
【中文标题】在 RSelenium 中完成的文档【英文标题】:Document complete in RSelenium 【发布时间】:2017-01-26 03:39:47 【问题描述】:而不是使用:
Sys.sleep(5)
要等待 dom 加载是否有任何等待要等到这个命令
document.readyState
给出结果"complete"
这样dom就准备好了
【问题讨论】:
【参考方案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 有时不会加载整个页面并给出一般异常并且我的程序停止。以上是关于在 RSelenium 中完成的文档的主要内容,如果未能解决你的问题,请参考以下文章
在Linux下由cron运行时RSelenium失败 - 为什么?