我正在使用htmlunit库创建一些应用程序,但问题是一些非常重要的网站无法加载,因为javascript异常:
a = data_frame(color = c("red", "blue", "green", "orange"), n = c(1000, 500, 300, 200))
b = data_frame(record = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"))
library(data.table)
setDT(a)
setDT(b)
a[order(-n),':='(proportion = (n/sum(n)), rowMax = round(cumsum(nrow(b)*(n/sum(n)))))]
a[,minRow := shift(rowMax, type = "lag", fill = 0)]
a[b[,rownum := .I], on=.(rowMax >= rownum, minRow < rownum)][,.(record, color, proportion)]
#result
# record color proportion
# 1: a red 0.50
# 2: b red 0.50
# 3: c red 0.50
# 4: d red 0.50
# 5: e red 0.50
# 6: f blue 0.25
# 7: g blue 0.25
# 8: h blue 0.25
# 9: i green 0.15
# 10: j orange 0.10
我尝试使用net.sourceforge.htmlunit.corejs.javascript.JavaScriptException: Error: fetch is not found globally and no fetcher passed, to fix pass a fetch for your environment like https://www.npmjs.com/package/unfetch.
,但它无效。如何解决?
答案 0 :(得分:0)
从HtlUnit版本2.30开始,不支持/实现Fetch API(https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)。请为HtmlUnit打开一个问题(如果你想提供补丁)。
因为IE中没有Fetch API(据我所知),也许可以选择使用HtmlUnit的IE模拟。
找出网站使用的api的哪个部分也会有所帮助。然后我们可以专注于首先实现这些东西。
答案 1 :(得分:0)
您可以尝试使用支持fetch API的Headless Chrome。
在此处下载Chrome驱动程序:https://chromedriver.storage.googleapis.com/index.html?path=2.38/
或者在macOS上:
brew install chromedriver
然后在pom.xml / graddle中添加最新版本的Selenium:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.1</version>
</dependency>
当然,您需要Chrome版本&gt; 59
这是Java部分:
String chromeDriverPath = "/Path/To/Chromedriver" ;
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless", "--disable-gpu", "--window-size=1920,1200","--ignore-certificate-errors");
WebDriver driver = new ChromeDriver(options);
我写了一篇博客文章,详细说明如下: https://ksah.in/introduction-to-chrome-headless/