第一種方法:
第二種方法:
使用window.onload 事件。當一個文檔完全下載到瀏覽器中時,才會觸發window.onload事件。這意味著頁面上的全部元素對js而言都是可以操作的,也就是說頁面上的所有元素載入完畢才會執行。這種情況對編寫功能性代碼非常有利,因為無需考慮載入的次序。
第三種方法:
使用jquery庫的ready方法。如:$(document).ready{}。會在DOM完全就緒並可以使用時調用。
註:
使用jquery庫的ready方法,雖然這也意味著所有元素對腳本而言都是可以訪問的,但是,並不意味著所有關聯的文件都已經下載完畢。換句話說,當HMTL下載完成並解析為DOM樹之後,代碼就會執行。
使用$(document).ready(){}一般來說都要優於試用onload事件處理程序,但必須要明確一點的是,因為支持文件可能還沒有載入完成,所以類似圖像的高度和寬度這樣的屬性此時不一定有效。
② 如何爬取JS動態生成的數據
String url = try { WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10); //設置webClient的相關參數 webClient.getOptions().setjavaScriptEnabled(true); webClient.getOptions().setCssEnabled(false); webClient.setAjaxController(new ()); //webClient.getOptions().setTimeout(50000); webClient.getOptions().(false); //模擬瀏覽器打開一個目標網址 HtmlPage rootPage = webClient.getPage(url); System.out.println("為了獲取js執行的數據 線程開始沉睡等待"); Thread.sleep(3000);//主要是這個線程的等待 因為js載入也是需要時間的 System.out.println("線程結束沉睡"); String html = rootPage.asText(); System.out.println(html);} catch (Exception e) {}
③ 如何爬取網頁中js動態生成的數據
Stringurl="http://xinjinqiao.tprtc.com/admin/main/flrpro.do";
try{
WebClientwebClient=newWebClient(BrowserVersion.FIREFOX_10);
//設置webClient的相關參數
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.setAjaxController(());
//webClient.getOptions().setTimeout(50000);
webClient.getOptions().(false);
//模擬瀏覽器打開一個目標網址
HtmlPagerootPage=webClient.getPage(url);
System.out.println("為了獲取js執行的數據線程開始沉睡等待");
Thread.sleep(3000);//主要是這個線程的等待因為js載入也是需要時間的
System.out.println("線程結束沉睡");
Stringhtml=rootPage.asText();
System.out.println(html);
}catch(Exceptione){
}
④ 爬取JS動態載入的網站,文字內容為編碼
你一點沒有仔細看清楚,瀏覽器已經解析出來就能獲取到的了。F12
⑤ 如何動態的載入js文件
1、直接document.write
document.write("<scriptsrc='test.js'></script>");
2、動態改變已有script的src屬性
<scriptsrc=''id="s1"></script>
<scriptlanguage="javascript">
s1.src="test.js"
</script>
3、動態創建script元素
<script>
varoHead=document.getElementsByTagName('HEAD').item(0);
varoScript=document.createElement("script");
oScript.type="text/javascript";
oScript.src="test.js";
oHead.appendChild(oScript);
</script>
這三種方法都是非同步執行的,也就是說,在載入這些腳本的同時,主頁面的腳本繼續運行,如果用以上的方法,那下面的代碼將得不到預期的效果。
4、原理:用XMLHTTP取得要腳本的內容,再創建 Script 對象。
注意:a.js必須用UTF8編碼保存,要不會出錯。因為伺服器與XML使用UTF8編碼傳送數據。
主頁面代碼:
<scriptlanguage="JavaScript">
functionGetHttpRequest()
{
if(window.XMLHttpRequest)//Gecko
returnnewXMLHttpRequest();
elseif(window.ActiveXObject)//IE
returnnewActiveXObject("MsXml2.XmlHttp");
}
functionAjaxPage(sId,url){
varoXmlHttp=GetHttpRequest();
oXmlHttp.OnReadyStateChange=function()
{
if(oXmlHttp.readyState==4)
{
if(oXmlHttp.status==200||oXmlHttp.status==304)
{
IncludeJS(sId,url,oXmlHttp.responseText);
}
else
{
alert('XMLrequesterror:'+oXmlHttp.statusText+'('+oXmlHttp.status+')');
}
}
}
oXmlHttp.open('GET',url,true);
oXmlHttp.send(null);
}
functionIncludeJS(sId,fileUrl,source)
{
if((source!=null)&&(!document.getElementById(sId))){
varoHead=document.getElementsByTagName('HEAD').item(0);
varoScript=document.createElement("script");
oScript.language="javascript";
oScript.type="text/javascript";
oScript.id=sId;
oScript.defer=true;
oScript.text=source;
oHead.appendChild(oScript);
}
}
AjaxPage("scrA","b.js");
alert("主頁面動態載入JS腳本。");
alert("主頁面動態載入a.js並取其中的變數:"+str);
</script>
⑥ 怎麼爬取網頁的動態內容,很多都是js動態生
抓取動態頁面有兩種常用的方法,一是通過JavaScript逆向工程獲取動態數據介面(真實的訪問路徑),另一種是利用selenium庫模擬真實瀏覽器,獲取JavaScript渲染後的內容。但selenium庫用起來比較繁瑣,抓取速度相對較慢,所以第一種方法日常使用較多。