gpt4 book ai didi

java - Jsoup 返回 Activity 文本字段

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:12 27 4
gpt4 key购买 nike

看起来很简单,但我无法检索此网页上的文本,而且它似乎正在发生变化。

package WorldBoss;


import org.jsoup.nodes.Document;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.net.MalformedURLException;

public class WorldBoss {

public static void main(String [] args) throws MalformedURLException {
Document page = null;
try {
page = Jsoup.connect("http://wiki.guildwars2.com/wiki/World_boss").get();
} catch (IOException e) {
e.printStackTrace();
}
Elements allTimers = page.getElementsByClass("timerjs");
String firstTime = allTimers.first().html();
System.out.println(firstTime);
}
}

由于倒计时,它正在发生变化。

在页面的属性中,它表示innerHTML是正确的

enter image description here

有谁知道我如何使用 Jsoup 获取此信息?

页面是here如果您想查看的话。

最佳答案

正如 Pshemo 在评论中提到的,Jsoup 是一个 html 解析器,因此它既不渲染页面也不执行页面上的脚本。

为了成功提取您想要的字段,我通过 selenium 使用 phantomjs 驱动程序对您的代码进行了轻微修改。使用 phantom 获取和渲染页面,并将页面源通过管道传输到 Jsoup 进行解析。找到下面的代码:

import org.jsoup.nodes.Document;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public class WorldBoss {

public static void main(String [] args) {

WebDriver driver = new PhantomJSDriver(new DesiredCapabilities());
driver.get("http://wiki.guildwars2.com/wiki/World_boss"); //retrieve page

//It is very bad to wait explicitly, the best practice is to wait for a specific element on the page e.g. the element you're looking for [1]
try { // wait to ensure page is loaded and java script is rendered
Thread.sleep(3 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

String pageSource = driver.getPageSource();
Document page = Jsoup.parse(pageSource);
Elements allTimers = page.getElementsByClass("timerjs");

for (Element timer : allTimers) {
//you can get whichever timer you want with it's index
String firstTime = timer.html().trim();
if (firstTime.isEmpty()) continue;
//use timer for whatever you want
System.out.println(firstTime);
}
}
}

我使用了maven,所以pom文件中的依赖项是:

    <dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
</dependency>
<dependency>
<groupId>com.github.detro.ghostdriver</groupId>
<artifactId>phantomjsdriver</artifactId>
<version>1.0.1</version>
</dependency>

代码输出为:

Active
00:01:33
00:01:33
00:16:33
00:31:33
00:46:33

如果您的计算机上没有安装 phantomjs,则需要安装它才能正常工作。要在基于 Debian 的机器上安装 phantom:

sudo apt-get install phantomjs

对于其他平台(或从源代码构建)see how to install phantom .

希望这有帮助。

  1. How to wait for elements in selenium

关于java - Jsoup 返回 Activity 文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877468/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com