免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2917 | 回复: 11
打印 上一主题 下一主题

请问可以用Perl下载javascript链接吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-05 22:46 |只看该作者 |倒序浏览
就是这页面上几个下载链接:
http://www.namejet.com/Pages/Downloads.aspx

真头疼啊,不能直接拖到了
求教高手,谢谢 .^__^.

论坛徽章:
0
2 [报告]
发表于 2012-04-05 23:16 |只看该作者
本帖最后由 sjdy521 于 2012-04-05 23:17 编辑

点击链接,js会生成一个会post请求到服务器,你用perl可以模拟这个http请求就是了。不过你需要知道发请求的规则,这个要分析源代码,比较耗费时间,

论坛徽章:
0
3 [报告]
发表于 2012-04-05 23:32 |只看该作者
尽管看起来就是这样固定链接和位置这么简单,但用perl来仍旧需要很多分析处理吗?

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
4 [报告]
发表于 2012-04-05 23:40 |只看该作者
就一个post 很简单

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
5 [报告]
发表于 2012-04-05 23:47 |只看该作者
  1. use LWP::UserAgent;
  2. use URI::Escape;
  3. my $ua = LWP::UserAgent->new;
  4. my $downid = 'ctl00$ContentPlaceHolder1$hlPreRelease1';
  5. my $response=$ua->get( "http://www.namejet.com/Pages/Downloads.aspx");
  6. my ($VIEWSTATE) = $response->decoded_content =~ /(?<=_VIEWSTATE" value=")(.+?)(?=")/;
  7. my ($EVENTVALIDATION) = uri_escape($response->decoded_content =~ /(?<=__EVENTVALIDATION" value=")(.+?)(?=")/);
  8. my $response=$ua->post( "http://www.namejet.com/Pages/Downloads.aspx",Content => "__EVENTTARGET=$downid&__VIEWSTATE=$VIEWSTATE&__EVENTVALIDATION=$EVENTVALIDATION");
  9. print $response->decoded_content;
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-04-06 00:23 |只看该作者
谢谢ls高手
如果javascript后面网站会自动更换的话,还有办法吗
好像perl 有个 Javascript Module, 不知能否利用它来做到直接模拟点击呢?

论坛徽章:
0
7 [报告]
发表于 2012-04-06 00:40 |只看该作者
另外,请问这样POST后能自动检测到下载的文件名吗

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
8 [报告]
发表于 2012-04-06 10:32 |只看该作者
本帖最后由 ziyunfei 于 2012-04-06 10:33 编辑
  1. use LWP::UserAgent;
  2. use URI::Escape;
  3. my $ua = LWP::UserAgent->new;
  4. my $html=$ua->get( "http://www.namejet.com/Pages/Downloads.aspx")->decoded_content;
  5. my ($VIEWSTATE) = $html =~ /(?<=_VIEWSTATE" value=")(.+?)(?=")/;
  6. my ($EVENTVALIDATION) = uri_escape($html =~ /(?<=__EVENTVALIDATION" value=")(.+?)(?=")/);
  7. while($html =~ /(?<=__doPostBack\(&#39;)(.+?)(?=&#39;,&#39;&#39;\)">)/g){
  8.         my $downloadid=$&;
  9.         my $response=$ua->post( "http://www.namejet.com/Pages/Downloads.aspx",Content => "__EVENTTARGET=$downloadid&__VIEWSTATE=$VIEWSTATE&__EVENTVALIDATION=$EVENTVALIDATION");
  10.         my ($downloadname) = $response->header("Content-disposition")=~/(?<=filename=)(.+)/;
  11.         open FH, ">$downloadname";
  12.         print FH $response->decoded_content;
  13. }
复制代码

论坛徽章:
0
9 [报告]
发表于 2012-04-06 21:34 |只看该作者
厉害啊,谢谢高手

论坛徽章:
0
10 [报告]
发表于 2012-04-06 21:47 |只看该作者
回复 5# ziyunfei


    哇,够激情~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP