由于js异常,Htmlunit无法加载网站的所有元素

时间:2018-03-26 22:25:02

标签: java exception htmlunit

我正在使用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.,但它无效。如何解决?

2 个答案:

答案 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/