selenium - Jsoup 从一开始只获取几行 HTML,甚至不到 25%
问题描述
当我尝试在网站上执行 CTRL+U 时,它也比我从 jsoup 得到的更多。正在使用的站点是 Open SAP -> https://open.sap.com/courses 已尝试超时和 maxbodysize 以及 jsoup.connect。现在我的代码如下所示:
private static String getHtml(String location) throws IOException {
URL url = new URL(location);
URLConnection conn = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String input;
StringBuilder builder = new StringBuilder();
while((input = in.readLine()) != null)
{
builder.append(input);
}
return builder.toString();
}
document = Jsoup.parse(getHtml(URL));
但仍然返回相同的 HTML。通过硒它是可能的,但它有点慢所以任何其他方式来实现这一点?因为目标是找出课程的链接,然后加载它们以找到他们的课程摘要,使用 selenium 会太慢。
请建议在这里可以做什么。
解决方案
这个页面的页面内容是在你的浏览器内部基于js构建的。您需要一个支持 js 的框架来执行此操作。
使用 HtmlUnit 我得到了这样的页面
String url = "https://open.sap.com/courses";
try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_68)) {
webClient.getOptions().setThrowExceptionOnScriptError(false);
HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScriptStartingBefore(10_000);
System.out.println("-------------------------------");
System.out.println(page.asText());
System.out.println("-------------------------------");
}
HtmlUnit 有一个丰富的 API 可以对页面对象做任何你喜欢的事情,比如搜索控件/内容、单击控件或从页面的某些部分提取文本。
推荐阅读
- python - Python HTTP 服务器保持活动状态
- python - 字符串对象如何存储在内存中,为什么要在 python 中将字符串对象转换为字节对象?
- angular - 为什么即使不在任何模块的声明中也可以访问组件?
- php - 它没有显示我使用 Symfony 从数据库中提取的数据的详细信息
- swift - 将代码更新到 Swift 5.1 'withUnsafeBytes 已弃用:改用 withUnsafeBytes(_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R'
- python - windows突然无法运行python“这个应用程序不能在你的PC上运行了”
- amazon-web-services - 如何查询 AWS Elasticsearch 集群中的 NodeId?
- azure - 用户帐户不显示应用程序分配
- java - JMH 的注释处理器不工作。我该如何调查原因?
- c - 无符号定点 0.28 格式