动态创建的js因为是异步加载,所以可能没有完全加载,就往下执行。
应该需要保证加载完成后,再根据回调函数往下执行,就能保证输出是正确的。
html页面动态加载js文件脚本的方法。
1、直接document.write
<script language="javascript">document.write("<script src='test.js'><\/script>")
</script>
2、动态改变已有script的src 属性
<script src='' id="s1"></script><script language="javascript">
s1.src="test.js"
</script>
3、动态创建 script元素
<script>var oHead = document.getElementsByTagName('HEAD').item(0)
var oScript= document.createElement("script")
oScript.type = "text/javascript"
oScript.src="test.js"
oHead.appendChild( oScript)
</script>
这三种方法都是异步的,所以在采用这类方法动态加载Js的同时,主界面的Js脚本是继续执行的,所以可能出现通过异步加载的Js代码得不到预期的效果的情况。
phantomjs 抓取js动态加载数据的方法:
phantomjs因为是无头浏览器可以跑js,用来进行网页抓取是再好不过了。
比如我们要批量抓取网页 “历史上的今天” 的内容。
第一行将会在终端打印出字符串,第二行 phantom.exit 将退出运行。
在该脚本中调用 phantom.exit 是非常重要的,否则 PhantomJS 将根本不会停 止。 pyspider 连上 PhantomJS 代理后,你就能通过在 self.crawl 添加 fetch_type='js' 的参数,开启使用 PhantomJS 抓取。