放1000分,高手进来动手试试:如何提取AJAX里的HTML内容?

asett1 2006-12-14 12:38:15
就拿google maps(http://maps.google.com)来实验吧.
发送一个请求,如:
http://maps.google.com/maps?f=q&hl=zh-CN&q=Shanghai&ie=UTF8&om=0&z=14&ll=36.451113,115.97\0821&spn=0.036453,0.086517&t=k
如何利用IHTML* 接口提取到地图里的图像地址?
每次请求可以得到20个地图图像的<IMG>标签。
偶现在很傻的办法是:嵌入一个browser控件,每次去取它的temp files,
要么就是从firefox里的Tools --> Page Info 里得到这些<IMG>

嵌入一个browser 实在很傻,偶需要轻量级的代码来实现。
偶的思路是 利用spidermonky 这样的java 解析器来分析得到的内容,但并不止这些。

1000分!! 得到解答后立即分5个贴给分。

...全文
1871 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
asett1 2007-03-27
  • 打赏
  • 举报
回复
经过几个月不懈的努力,终于成功实现了全部功能,可以下载并自动合成超大的google卫星图片了,
可以达到80000*60000大小 Jpeg格式,并没有上限。下一步,准备实现智能自动探索城市范围,以及
配套的看图软件,这么大的图片可是一打开就死机的。
自动探索城市范围可以自动发现一些军事基地啥的,google会在很多偏僻的地方提供大图,而这些很难用人工发现的。

软件效率也经过优化,运行时内存不超过20M,即使合成超大图片的时候,还可以进一步利用显卡加速。
这么个小软件,用到的技术和技巧,足以写一本非常综合的编程书籍。

最后,感谢各位提供的思路,回过头来才发现你们的建议是多么有效。

asett1 2007-03-01
  • 打赏
  • 举报
回复
试了老外的代码,已经不管用了。google 和hacker在玩猫捉老鼠的游戏。网上众多的下载软件也都不能下了。
看来还是我的思路保险:用hack的办法只能管一会,不能管时间长。google会不停的变换加密算法的。但不管怎么变换,还是得让browser观看啊。




asett1 2007-02-08
  • 打赏
  • 举报
回复
Iamfish(呆鱼) 给的思路也很好啊。
我现在分析了部分firefox的源码,思路清晰多了,估计春节就可以提炼出一个强大的Javascript分析器:给定一个url, 提交后就可以下载到指定特征的img 或 其他媒体文件的返回字符串。
其实firefox关于javascript的解析不复杂,主要是它的实现框架。
Iamfish 2007-02-04
  • 打赏
  • 举报
回复
你是不是想在map.google.com下载卫片?
我觉得你需要转换一下思路。
人家用Flash实现的。我已经反编译出Action Script,正在分析中。

http://www.flashearth.com/flash_earth.swf
hot_blood2001 2007-02-01
  • 打赏
  • 举报
回复
up
蒋晟 2007-01-30
  • 打赏
  • 举报
回复
Javascriipt functions are methods of the script engine, which you can access via IHTMLDocument::get_Script.

If you know the prototype of the javascript function, you might be able to "override" it by using IDispatchEx to replace the property with your IDispatch implementation, which calls the original javascript function.

further reading:
http://www.codeproject.com/com/dispexsinkconnector.asp
ReverseEngineering 2007-01-11
  • 打赏
  • 举报
回复
有分我就路过。
布学无数 2007-01-04
  • 打赏
  • 举报
回复
mark
asett1 2007-01-04
  • 打赏
  • 举报
回复
多谢 DarknessTM(我的缘分在哪里?) ,masterz(www.fruitfruit.com) 两位高手帮顶。

我使用过codeproject网上类似masterz(www.fruitfruit.com)提供的JS call 封装类。
但是主要问题没解决:
1.对于复杂JS脚本文件的解析(170k 大小)。JS call 封装类只是对于单个简单的JS脚本的封装。
对于如此复杂的maps.70.js 文件没有任何反应。
2. Webbrowser如何接受,和JS解析器进行交互? 我们虽然有强大的spidermonky的JS解析器的exe和lib,但
怎样和Webbrowser传递变量?传递结果的? 这方面没有任何文档描述。只能看firefox源码。

masterz 2007-01-03
  • 打赏
  • 举报
回复
要执行js可能没有轻量级的办法,下面的资料可能有些帮助
http://support.microsoft.com/kb/185127
如何从 WebBrowser VC 应用程序调用脚本函数
我觉得可以在程序中嵌入webbrowser控件,执行js脚本,同时禁止加载图像(通过实现IDocHostUIHandler接口,输入 DOCHOSTUIFLAG_NOPICS flag.)这样可以获得纯html文本而不下载图片文件。
DarknessTM 2007-01-03
  • 打赏
  • 举报
回复
此问题分明是开发浏览器中JS解析器的部分了
asett1 2006-12-30
  • 打赏
  • 举报
回复
谢谢 lion_wing(凤之焚-业与情的纠缠,死而复生的蜕变!)
我觉得:图像位置的HTML也是server发到本地来的,而且在DOM Inspector里也仅找到一处image url
出现的地方(共30个),说明browser是把接受到的HTML “剥离”了,把图像地址发出,被我们截获,
而image的属性被browser保留用作显示。
我准备趁元旦这几天好好研究firefox 2.0源码,目标是提取个超精简的js/xml解析器
lion_wing 2006-12-30
  • 打赏
  • 举报
回复
得到图片地址的方法是拦截的服务器到本地的代码。
要得到图片的位置,和JS的解析有关,研究中。
lily_123567 2006-12-29
  • 打赏
  • 举报
回复
mark
asett1 2006-12-29
  • 打赏
  • 举报
回复
lion_wing(凤之焚-业与情的纠缠,死而复生的蜕变!)
我试了"text/xml" 结果什么都得不到,连CHTMLFilter::ReportData()都没调用!
说明得到的还是HTML ,firefox的DOM Inspector把HTML转成xml而已。
您提供的例子也肯定没帮助了:它是把xml转成HTML.

能否空闲时动手帮我试一下? 我等您的消息。这东西实践性太强,肯定有很大的处理技巧,单单指导效果不大。像您动手帮我把URL得到用到的MIME filter 对我就属于新东西。
谢谢!

lion_wing 2006-12-29
  • 打赏
  • 举报
回复
example:
http://support.microsoft.com/kb/260840
asett1 2006-12-29
  • 打赏
  • 举报
回复
我今天再试试"text/xml" 不过总感觉捕获不到。
DataStream 报错在Atlbase.h 的指针非NULL 断言错误,如下:

_NoAddRefReleaseOnCComPtr<T>* operator->() const
{
ATLASSERT(p!=NULL);
return (_NoAddRefReleaseOnCComPtr<T>*)p;
}

如何修改?
lion_wing 2006-12-29
  • 打赏
  • 举报
回复
1、你用的是“text/html”?我想你应该用“text/xml”
m_pSession->RegisterNameSpace(m_pFactory, CLSID_HTMLFilter, L"http", 0, NULL, 0);
是对URL的http命名空间的截获。
2、DataStream是为浏览器准备的数据。报错?出什么错误?
asett1 2006-12-29
  • 打赏
  • 举报
回复
通过firefox自带的工具 DOM Inspector 得到的
firefox的工具确实强大:除了DOM Inspector,Page Info,Save As 都可以得到image url,
image的属性在DOM Inspector 和Save As里也可以得到。
我感觉google maps 就是分2步走:第一步得到常见的html,第二步再根据解析maps.70.js 文件,进一步连接server,得到HTML, 本质上第二次方法跟第一次都一样,只不过它分2次走,造成获取HTML的困难。
lion_wing 2006-12-29
  • 打赏
  • 举报
回复
<IMG
style="border: 0px none ; margin: 0px; padding: 0px; position: absolute; left:

917px; top: 724px; width: 256px; height: 256px; -moz-user-select: none;"

src="http://kh2.google.com/kh?n=404&v=13&t=ttrrq"/>

请问,这段代码你是怎样得到的?
加载更多回复(42)

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧