簡體   English   中英

Jsoup返回活動文本字段

[英]Jsoup returning &nbsp for active text fields

因此,看起來似乎很簡單,但我無法在此網頁上檢索文本,並且它似乎正在發生變化。

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是正確的

在此處輸入圖片說明

有誰知道我如何通過Jsoup獲得此信息?

如果您想簽出該頁面,請點擊此處

正如Pshemo在評論中提到的那樣,Jsoup是一個html解析器,因此它既不呈現頁面也不在頁面上執行腳本。

為了成功提取所需的字段,我通過硒使用phantomjs驅動程序對您的代碼進行了一些修改。 使用幻像獲取和呈現頁面,並將頁面源通過管道傳遞給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

對於其他平台(或從源代碼構建), 請參閱如何安裝phantom

希望這可以幫助。

  1. 如何等待硒中的元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM