增强AJAX/Javascript/JS网页文字抓取能力
本文是对《AJAX动态网页信息提取原理》
的补充,前文总结了两种AJAX网页文字的抓取方法:
网页文字在加载HTML文档(document)的时候用Javascript代码获取和展现,此Javascript代码在发送load事件之前运行,那么接收到load事件表示所有的内容都加载完了
网页文字在加载完HTML文档(document)后在某个时刻用Javascript代码获取和展现,此Javascript代码在发送load事件之后运行,那么接收到load事件并不表示表示所有的内容都加载完了,需要特别的判别机制。
上述两种情况实际上没有考虑AJAX的一项重要特性:异步加载。也就是HTML网页文字内容并不是与HTML文档同步加载的,而是在特定情形下(例
如,用户点击超链接)异步地从服务器上获取并展现的。此时,不能使用load事件触发网页文字抓取。DataScraper从V4.2.0B57版本开始
进行了增强,能够抓取异步加载的内容。
因为没有load事件触发抓取操作,要进行合理配置,告知DataScraper不要等待load事件。如果是周期性自动抓取网页文字
,通过设置排期指令文件
的
waitOnload参数就可以达到该目的,然而,在V4.2.0B57之前的版本,所有手工启动的抓取都是waitOnload=true,也就是等待
load事件,提取异步加载内容时很可能出现:Timeout to load the page
错误。从V4.2.0B57版本开始,增加了DataScraper菜单:配置
->等待load
,这是一个checkbox菜单,将钩去掉就不再等待load事件。
例如,MetaCamp服务器上有个主题:demo_js_paging_sohu,用于抓取sohu名人博客
和
相关评论,评论内容是AJAX动态生成的,当名人博客很受关注时,会有很多评论,这些评论分成多页显示,当用户点击“下一页”超链接时,并没有加载一个新
的HTML网页,而是异步从网站上获取下一页评论内容,动态修改当前网页的DOM结构进行展现,因此,没有页面加载就没有load事件。要翻页提取这些评
论,需要设置waitOnload=false,否则会遇到Timeout to load the page 错误。
注意
:异步加载的内容什么时候加载完了,没有一个确切的时间点,人阅读网页时,根据上下文可以理解并判断是否已经将异步内容加载上
了,但是计算机程序不能理解语义,DataScraper尽量使用一种智能方法加以判断,然而仍然有误判的可能,主要发生在目标网站的服务质量很不稳定的
时候,异步加载内容并进行显示刷新的过程是时断时续的,而不是持续的均匀地进行,此时,DataScraper就会出现误判。
相关文档:
向上:
<div id=demo style="overflow:hidden; width:128px; height:300px;">
<div id=demo1>
<img src="/gfjs.gif"><br><img src="/bxtt.gif"><br><img src="/bzjd.gif"><br>
<img src="/gfjs.gif"><br><img src="/bxtt.gif"><br><img ......
1.胖客户端的部署方案
java web start
.net clickonce
2.入侵思路
HTTP数据的记录->发现ajax可能存在问题的点->绕过javascript的一些限制和破解javascript混淆代码->找到json的sql注入点->找到ajax可以添加管理员的回调函数和json相关
3.sql注入小技巧
union select name from sysobjects where xtype='U ......
<mce:script type="text/javascript" language="javascript"><!--
function del(com_id,meet_id){
$.ajax({
url:'../company/meet.Ajax.php',
type:'POST',
data:{com_id:com_id,meet_id:meet_id},
dataType:"json",
timeout: 10 ......
JavaScript页面刷新与弹出窗口问题解决方法
1.无提示刷新网页
大家有没有发现,有些网页,刷新的时候,会弹出一个提示窗口,点“确定”才会刷新。
而有的页面不会提示,不弹出提示窗口,直接就刷新了.
如果页面没有form,则不会弹出提示窗口。如果页面有form表单,
a)< form method="post" ...&g ......