使用perl填充div表单

时间:2013-08-25 11:07:51

标签: perl youtube form-submit www-mechanize

我正在尝试通过使用youtube链接填充youtube下载程序网站表单,使用perl制作youtube下载程序脚本,提交并接受要下载的文件。

我尝试了很多不同的代码,但我无法填写表格,我认为这是因为表格在< div>标签

我该怎么做?

谢谢。

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use WWW::Mechanize;

my $url = 'http://www.youtube-mp3.org';
my $m = WWW::Mechanize->new();
my $textbox = 'youtube-url';
my $youtubelink = "http\:\/\/www.youtube.com\/watch\?v\=lDK9QqIzhwk";
my $cgi = CGI->new();
my $form = $cgi->Vars;


$m->get($url);


$m -> form_number ('1');
$m -> field($youtubelink, $form->{$textbox});
$m -> submit();


$m->submit();


print $m -> content();

$m->follow_link(text_regex => qr/Download/i);
my $response = $m->res();
my $filename = $response->filename;

if (! open ( FOUT, ">$filename" ) ) {
    die("Could not create file: $!" );
}
print( FOUT $m->response->content() );
close( FOUT );

1 个答案:

答案 0 :(得分:0)

在第

$m -> field($youtubelink, $form->{$textbox});

您传递的值与第一个输入的值属性相对应,但是字段方法不需要,而是名称。 (除了输入没有名称属性)

我也认为你不能只填写表格上的字段然后提交。如果您看到源代码,它将在提交表单之前运行一些javascript代码

当我们点击提交按钮时,看看网络上发生了什么,它显示了两个GET方法的序列

首先是这个

http://www.youtube-mp3.org/a/pushItem/?item=http%3A//www.youtube.com/watch%3Fv%3DKMU0tzLwhbE&el=na&bf=false&r=1377433712868 

返回

KMU0tzLwhbE

然后第二次调用(注意video_id是第一次GET返回的值)

http://www.youtube-mp3.org/a/itemInfo/?video_id=KMU0tzLwhbE&ac=www&t=grp&r=1377433713366

返回

info = { "title" : "Developers", "image" : "http://i.ytimg.com/vi/KMU0tzLwhbE/default.jpg", "length" : "3", "status" : "serving",  "progress_speed" : "",  "progress" : "",  "ads" : "",  "pf" : "",  "h" : "c21be9b00d0ec12ea980bf828d09440c"  };

所以我的建议是准备第一个URL,发布,提取答案,然后发布第一个请求的答案组成的第二个URL。