2013-08-25 4 views
1

Я пытаюсь создать скрипт загрузчика youtube с помощью perl, заполнив форму сайта загрузчика youtube с помощью ссылки youtube, отправьте ее и примите файл для загрузки.Заполнение форм div с помощью perl

Я пробовал много разных кодов, но я не мог заполнить форму, я думаю, это потому, что форма находится в < 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

Вы можете попробовать этот скрипт: https://calomel.org/youtube_wget.html –

ответ

0

В строке

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

Ваш, передавая значение, которое соответствующее значение атрибута первого ввода, однако способ не требует поля значения но имени. (кроме того, что вход не имеет значения )

Я также думаю, что вы не можете просто заполнить поля по форме и затем отправить их. Если вы видите исходный код будет работать некоторый яваскрипта код перед отправкой формы

Взгляд на то, что происходит в сети, когда мы нажмите на кнопку отправки он показывает последовательность из двух методов 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 это значение, возвращаемое первым ГЭТ)

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, составленный с ответом от первого запроса.

 Смежные вопросы

  • Нет связанных вопросов^_^