запустить java скрипт в R - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь использовать R для запуска javascript с веб-страницы. и создать внутренние переменные в R. Я мог бы сделать это с помощью веб-драйверов, таких как селен, но я хочу сделать это с javascript engine v8 изнутри R, а не из экземпляра браузера. Однако я не могу создать объект window в движке V8. Вот мой код для чтения и оценки 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 и др. c. который меня не волнует, но я не могу запустить остальную часть кода; Я получаю ошибку как ReferenceError: the document is not defined. Есть ли способ создать фиктивный объект window в движке V8 независимо от браузера? или даже лучше решить пропустить любую строку, чем вы не можете выполнить?

1 Ответ

0 голосов
/ 08 февраля 2020

есть ли способ создать фиктивный объект окна в движке V8 независимо от браузера?

Конечно, вы можете реализовать фиктивный объект window в JavaScript ( независимо от того, какой движок вы используете, V8 или любой другой):

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

или вы можете найти существующую библиотеку, которая уже выполнила всю эту работу (это большая работа!) для вас. Используйте вашу любимую поисковую систему.

Это заставляет меня задуматься о том, являются ли выбранные вами инструменты наиболее подходящими для работы. Существует довольно большой разрыв между чистым ECMAScript, реализованным в V8, и всеми инструментами взаимодействия с DOM / браузером, которые доступны и используются скриптами на веб-сайтах.

или даже лучше определить, что пропустить любую строку, чем Вы не можете выполнить?

Нет; В V8 такого режима нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...