在 R 中运行 java 脚本

问题描述 投票:0回答:2

我正在尝试使用 R 从网页运行 javascript。并在 R 中创建内部变量。我可以使用 selenium 等 Web 驱动程序来执行此操作,但我希望使用 R 内部的 javascript 引擎 v8 来执行此操作,而不是从浏览器实例中执行此操作。但是,我无法在 V8 引擎中创建

window
对象。这是我在页面中读取和评估 javascript 的代码:

library('rvest')
library("V8")
library("dplyr")
url <- 'https://google.com'
webpage        <- read_html(url)
script         <- html_nodes(webpage,'script') %>% html_text %>% paste(collapse = "\r\n")
ct <- v8()
ct$eval(src = script)

在javascript代码中,它们引用了内部dom对象,如

document
body
等,我不关心它们,但我无法运行其余的代码;我收到类似
ReferenceError: the document is not defined
的错误。有没有办法在 V8 引擎中创建一个独立于浏览器的虚拟
window
对象?或者甚至更好地决定跳过任何一行而不是无法执行?

r web-scraping v8
2个回答
0
投票

有没有办法在V8引擎中创建一个独立于浏览器的虚拟窗口对象?

当然,您可以在 JavaScript 中实现一个虚拟

window
对象(无论您使用的是哪种引擎,V8 还是任何其他引擎):

window = window || this;
window.document =  ...;
window.location =  ...;
window.setTimeout = function(...) {...};
window.... = ...;  // etc.

或者您可以寻找一个已经为您完成所有这些工作(工作量很大!)的现有库。使用您最喜欢的搜索引擎。

但这确实让我想知道您选择的工具是否是最适合这项工作的工具。 V8 实现的纯 ECMAScript 与网站上的脚本可用和使用的整个 DOM/浏览器交互内容之间存在相当大的差距。

或者甚至比无法执行更好的决定是跳过任何行?

不; V8没有这样的模式。


0
投票

我已经能够使用以下代码运行 javascript :

library(RDCOMClient)
url <- "https://www.google.com/"
IEApp <- COMCreate("InternetExplorer.Application")
IEApp[['Visible']] <- TRUE
IEApp$Navigate(url)
doc <- IEApp$document()
doc$parentWindow()$ExecScript("alert('yep, it worked!')")

您可以通过相同的方法使用 R 包 RSelenium。

© www.soinside.com 2019 - 2024. All rights reserved.