我正在尝试通过使用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 );
答案 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。