求高手解答----java 如何获取网页上动态生成的图片的真实地址

芮淼一线 发布于 2015/05/24 19:44
阅读 1K+
收藏 2

     

         如题。现在我已经能够利用java解析html中的普通的图片地址。

         但是  我现在想实现-->获取那种网页中看不到图片的地址,但是利用浏览器就可以获取它的真实地址(这种图片资源应该是利用形如js代码--动态加载的)


        要怎么才能获取这种动态加载的图片的真实地址,请大神指教,最好是能给处代码事例!

       谢谢!

       ps:(例如:http://www.kxdm.com/look/720481/784114/10.html 如何解析该网页上的图片)

加载中
0
Feng_Yu
Feng_Yu

这种就是js执行的结果。So, 抓包+读js代码即可。

EDIT: 用chrome的开发者工具看了一下,搜索了一下,在http://www.kxdm.com/scripts/lookphoto_d1.js这个js中实现了读取图片的算法。

图片服务器是imgs1.ysryd.com,你在那个js中ctrl+f一下就能看到这段算法

EDIT2: 还有一种偷懒的方案。既然是js执行的结果,所以你只需要一个沙箱运行js即可。那么理所当然会想到浏览器。于是,一个web driver就会发现: selenium 。这个玩意可以调用市面上常见的浏览器,常用来做web自动化测试,甚至还可以调用PhantomJS

如果你用的是groovy,那么你可以尝试下更好用的geb,使用groovy基于selenium开发,更强更好用。

不过由于增加了别的依赖,需要调用浏览器或者js沙箱,所以会比你直接实现js算法要慢一些,而且不容易迁移和跨平台(目标平台上也需要装一堆依赖,还需要指定的浏览器)

0
houhuiliang
houhuiliang

其实图片地址路径已经给出来了,只不过是加密的,如下:

请求地址:http://www.kxdm.com/look/720481/784114/10.html

js图片数据:

var pic = new Array();
			pic[0] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAwMS5qcGc=';
			pic[1] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAwMi5qcGc=';
			pic[2] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAwMy5qcGc=';
			pic[3] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAwNC5qcGc=';
			pic[4] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAwNS5qcGc=';
			pic[5] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAwNi5qcGc=';
			pic[6] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAwNy5qcGc=';
			pic[7] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAwOC5qcGc=';
			pic[8] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAwOS5qcGc=';
			pic[9] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxMC5qcGc=';
			pic[10] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxMS5qcGc=';
			pic[11] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxMi5qcGc=';
			pic[12] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxMy5qcGc=';
			pic[13] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxNC5qcGc=';
			pic[14] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxNS5qcGc=';
			pic[15] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxNi5qcGc=';
			pic[16] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxNy5qcGc=';
			pic[17] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxOC5qcGc=';
			pic[18] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxOS5qcGc=';
图片路径10.html对应数组中的pic[9] = 'aW1ncy9ETS9EL2RwY3EvMTAwLzAxMC5qcGc=';

现在就需要解密了,解密方式为base64 decode,php 中base64解密方式为base64_decode($str);得到路径如下imgs/DM/D/dpcq/100/010.jpg,加上图片服务器域名即:http://imgs1.ysryd.com/imgs/DM/D/dpcq/100/010.jpg,图片服务器域名有多个,可以参考http://www.kxdm.com/scripts/selserver.js,这里定义了图片服务器域名。

houhuiliang
houhuiliang
回复 @芮淼一线 :在js里有个 pic_server_num = 3;
芮淼一线
芮淼一线
还有我怎么确定它的图片服务器是哪一个呢,它不是有3个吗?
芮淼一线
芮淼一线
谢谢!
返回顶部
顶部