javafx爬取网页并且初始化网页数据
生活随笔
收集整理的這篇文章主要介紹了
javafx爬取网页并且初始化网页数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、需求場景
編寫爬蟲爬取網頁的信息,而網頁的信息經常是未初始化,沒有辦法獲取網頁的數據信息。
網頁加載數據有兩種類型:第一種是網頁請求回來,數據已經加載好了;第二種是網頁的數據信息還沒有初始化,通過瀏覽器的腳本進行異步請求初始化數據。
?
二、解決方法
通過使用javafx的WebEngine 把網頁加載回來初始化,并執行腳本把初始化網頁轉成html。
import com.sun.javafx.application.PlatformImpl; import javafx.concurrent.Worker.State; import javafx.scene.web.WebEngine;public class Test {public static void main(String[] args) throws InterruptedException {PlatformImpl.startup(() -> {doDom();System.out.println("finish");});}static WebEngine webEngine;//webEngine必須要有引用在使用,不能定義成局部變量,否則被gc回收就沒有輸出結果public static void doDom(){webEngine = new WebEngine();webEngine.getLoadWorker().stateProperty().addListener((obs, oldValue, newValue) -> {if (newValue == State.SUCCEEDED) {String html = (String) webEngine.executeScript("document.documentElement.outerHTML");System.out.println(html);System.exit(0);}System.out.println(newValue + " ");}); // addListener()webEngine.load("https://www.w3cschool.cn/java/javafx-webengine.html");/*String s="<html>\n" +"\n" +"<head>\n" +"<title>我的第一個 HTML 頁面</title>\n" +"</head>\n" +"\n" +"<body>\n" +"<p>body 元素的內容會顯示在瀏覽器中。</p>\n" +"<p id='a'>title 元素的內容會顯示在瀏覽器的標題欄中。</p>\n" +"</body>\n" +"<script>var a =document.getElementById('a');\n" +"a.style.color='red';</script>\n" +"</html>\n";webEngine.loadContent(s);*/} }注意:在編寫過程中遇到了gc坑
總結
以上是生活随笔為你收集整理的javafx爬取网页并且初始化网页数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinXP系统电脑设置定时关机的操作方法
- 下一篇: 如何让路由器变ap如何把无线路由器设置成