在 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 中完成的文档的主要内容,如果未能解决你的问题,请参考以下文章

RSelenium:使用Chrome下载文件时出错

在Linux下由cron运行时RSelenium失败 - 为什么?

RSelenium弹出窗口

异常处理RSelenium switchToFrame()错误:ElementNotVisible

并行运行 RSelenium

如何在 Linux 服务器上使用 Rselenium