2013-08-29 6 views
0

У меня есть сценарий, который я пытаюсь войти в страницу Oracle EBS, и я считаю, что я на расстоянии одной строки (я мог ошибаться) от этого. Ниже мой сценарий и прилагается раздел из данных, я думаю, что ответ есть где-то.WWW :: Механизировать доступ к защищенному веб-сайту

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

Заранее благодарен!

use strict; 
use warnings; 
use WWW::Mechanize; 
use HTTP::Cookies; 
my $outfile = "test"; 
my $url = "http ://url_address:portnumber /OA_HTML/Login"; 
my $username = 'johndoe'; 
my $password = 'johndoe123'; 
my $mech = WWW::Mechanize->new(); 
$mech->cookie_jar(HTTP::Cookies->new()); 
$mech->get($url); 
$mech->form_id('DefaultFormName'); 
$mech->field("usernameField", $username); 
$mech->field("passwordField", $password); 
$mech->submit_form(

form_id => "DefaultFormName", 
fields => { 
    usernameField => $username, 
    passwordField => $password, 
    '_FORM_SUBMIT_BUTTON' => "SubmitButtonofEPmL1A", 
}, 
); 
my $output_page = $mech->content(); 
print $output_page; 
open(OUTFILE, ">$outfile"); 
binmode(OUTFILE, ":utf8");`enter code here` 
print OUTFILE "$output_page"; 
close(OUTFILE); 

Форма snipet:

"name="usernameField" size="0" type="text" value="johndoe"> 
< src="/OA_HTML/cabo/images/swan/t.gif" width="5"></td></tr><tr><td colspan="2"></td><td><span class="x2o"> 
(example: john.doe)</span></td></tr></table></td></tr><tr id="region41" align="left"><td id="region131" valign="top"><span class="x9g">*</span></td> 
<td id="region51" valign="top"><span class="x9c">Password</span></td><td id="region61"><table id="passwordField__xc_" border="0" cellspacing="0" cellpadding="0"><tr><td align="right" nowrap></td><td></td> 
<td valign="top" nowrap><input id="passwordField" title="Password" class=".LoginText" onchange="" name="passwordField" size="0" type="password"> 
< src="/OA_HTML/cabo/images/swan/t.gif" width="5"></td></tr><tr><td colspan="2"></td><td><span class="x2o"> 
(example: A1B2c3D4)</span></td></tr></table></td></tr><tr id="region132" align="left"><td id="region139"> 
</td><td id="region138"></td><td id="region133"> 
<button id="SubmitButton" title="Login" class="x7g" style="background-image:url(/OA_HTML/cabo/images/swan/btn-bg1.gif)" 
onclick="submitForm('DefaultFormName',1,{'_FORM_SUBMIT_BUTTON':'SubmitButtonofEPmL1A'});return false" type="submit">Login</button>< id="item11" src="/OA_HTML/cabo/images/swan/t.gif" width="2" height="1">" 

ответ

2

WWW :: Mechanize не обрабатывает JavaScript. Если задействован JavaScript (и, кажется, так, onclick="submitForm...), используйте какой-либо другой модуль (например, WWW::Mechanize::Firefox).

+1

Примечательно: что Mech не обрабатывает JavaScript - это самый первый вопрос в [WWW :: Mechanize FAQ] (http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize/FAQ .pod) –

+0

Любые предложения, что тогда? –

+0

@JohnTaylor: Вы читали ответ до самого конца? – choroba

1

Вам не нужно эти строки (WWW::Mechanize будет работать с печеньем для вас автоматически):

use HTTP::Cookies; 
$mech->cookie_jar(HTTP::Cookies->new()); 

Далее ... Вы уверены, что ваша ссылка есть этот тексту: submitForm? Может быть, вам нужно:

$mech->follow_link(url_regex => qr/submitForm/); 

Я рекомендую попробовать этот код вместо (для представлять часть):

$mech->submit_form(

    form_id => "DefaultFormName", 
    fields => { 
     usernameField => $username, 
     passwordField => $password, 
     '_FORM_SUBMIT_BUTTON' => "SubmitButtonofEPmL1A", 
    }, 
}; 

Update: Другой способ: вы должны использовать инструмент, как в Firefox HTTPFox дополнения и найти, какие данные отправляются на целевой сайт после каждого запроса. Затем вы просто отправляете одинаковые данные с $mech.

+0

Благодаря gangabass, у меня был похожий скрипт, который обращался к подобному сайту с URL-адресом Oracle EBS, и он работал нормально, поэтому я просто изменил информацию, чтобы она соответствовала сайту EBS, и, похоже, она работала до точки отправки. Поэтому, после того, как я перешел к чтению данных формы, я полагал, что мне не хватает строки или двух, касающихся отправки или клика. Я попробую ваше предложение Спасибо! Кстати, вы видите какие-либо подсказки в данных формы, которые я предоставил? –

+0

Итак, вот код, который я использовал с вашим предложением: –

+0

См. Мое оригинальное сообщение, где я добавил строки, которые вы предложили. Кажется, мы пошли назад, как в выходной файл, я не вижу имя пользователя в форме, как мы это делали раньше. –

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