现在有很多设置可以在网页上运行 Java 脚本。我认为最著名的可能是Selenium,因为我认为它已经存在了一段时间。其他包括karate、Puppeteer,甚至还有一个叫做Rhino的旧工具。 Puppeteer 是 Google, Inc. 的一个项目,它使用 Java-Script(服务器端 Java-Script,称为 Node.js。他们不喜欢我们在这里比较、对比库。
我还没有时间接触 Selenium,但我一直在编写 HTML 解析器、搜索和更新代码。如果您的唯一目标是加载一个其内容是动态“由 AJAX 调用填充”的页面 - 我的意思是,您只需要在您访问网站网页时通常会看到的 HTML 内容,而且你不关心按钮按下那么我一直使用的那个叫做 Splash 这个工具确实可以让您调用 Java 脚本,但如果您只想查看页面上的 JS 动态加载表格,那么从字面上看,您所要做的就是启动工具,然后添加一个一行到你的程序。
在 Google Cloud Platform 上,这两行代码将启动 Splash 代理服务器。如果您在 AWS (Amazon) 或 Azure (Microsoft) 上编写代码,它可能是相似的。如果您在办公室的本地机器上运行代码,则必须研究如何启动它。
安装 Docker。确保已安装 Docker 版本 >= 17。
拉取图片:
$ sudo docker pull scrapinghub/splash
启动容器:
$ sudo docker run -it -p 8050:8050 --rm scrapinghub/splash
然后,在您的代码中,您所要做的就是:
// If your original code looked like this:
URL url = new URL("https://en.wikipedia.org/wiki/Christopher_Columbus");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
return new BufferedReader(new InputStreamReader(con.getInputStream()));
将此示例中的第一行代码更改为此,并且(理论上)动态加载的 HTML 表格将在返回 HTML 页面之前自动加载,这些表格使用 onload 页面事件完成。
// Add this line to your methods
String splashProxy = "http://localhost:8050/render.html?url=";
URL url = new URL(splashProxy + "https://en.wikipedia.org/wiki/Christopher_Columbus");
对于大多数网站,任何由 JS/jQuery/AJAX 填充的初始表格都会被填充。如果您愿意学习Lua Programming Language,您也可以开始调用那里的方法。这对我的目的来说非常方便,因为我不是在编写网页测试代码(模拟用户按钮按下的代码)。如果您正在这样做,那么 Selenium 可能值得花时间学习/研究 A.P.I.