2014-01-21 40 views
1

我已經閱讀了有關WWW ::機械化,這似乎是我想做的答案各種幫助和文檔的頁面,但我一直無法找到任何很好的例子和黑客攻擊我自己的腳本一直不成功。如何使用WWW :: Mechanize通過POST登錄並接受Cookie並瀏覽網站?

我已經成功安裝了WWW ::機械化,我試圖讓它做什麼,我需要......

基本上,我試圖登錄過程自動化到一個網站,然後去一個特定的頁面。

正常人的過程對我來說是: 1.轉到「身份的服務器」,它是提供了一個簡單的登錄表單(有一些隱藏的價值,但有一個用戶名和密碼以及提交HTTPS網站按鈕[和'保存我的登錄'選項])。 2.成功登錄後,「身份服務器」會自動將我重定向到密碼保護的網站,作爲已通過身份驗證的用戶。

我已經能夠使用WWW ::機械化看到登錄頁面的源代碼,但我不知道如何發佈登錄信息反饋給服務器,以獲得登錄和重定向。

基本的腳本我已經測試如下。任何人都可以幫我解決問題,或者直接給我一個可以讓我自我幫助的例子嗎?

另外,我不認爲它很重要,但所涉及的網站相當,基於很多微軟服務器和DNN上。

在此先感謝。


use strict; 
use WWW::Mechanize; 

my $mech = WWW::Mechanize->new(); 
my $start = qq|https://login.foo.org/default.aspx|; 
$mech->get($start); 

my $username_field = 'ctl00$MainContent$tbUser'; 
my $password_field = 'ctl00$MainContent$tbPassword'; 

my $username = "123456"; 
my $password = "mypasssword"; 

$mech->field($username_field,$username); 
$mech->field($password_field,$password); 
$mech->submit(); # to get login cookie 
my $results = $mech->submit(); 

if ($results->is_success) { 
    print $results->content; 
} else { 
     print $results->message; 
} 

回答

0

與你的腳本的問題是你提交表單你嘗試登錄中放置一個會話cookie,以便它可以驗證你是驗證用戶的網站後,你不需要在重定向到您的私人登錄頁面後重新進行身份驗證。

你寫了上述腳本重定向到受保護的私人頁面,您在登錄後卻發現會話cookie不存在任何更多。所以你實際上並沒有享受登錄用戶的好處。基本上你需要啓用cookie保存。

以下是你需要[使用相同的機械化庫您使用]應該工作:

import cookielib 
    cj = cookielib.LWPCookieJar() 
    br.set_cookiejar(cj) # Now cookie jar can store the loggedIn session cookie so you can access the private pages of a logged in user. 
    #Extra code may not be required for you 
    br.set_handle_redirect(True) 
    br.set_handle_referer(True) 
    br.set_handle_robots(False) #Some websites won't allow scripts by placing a robots.txt file in their root directory so you need to set robots to false. e.g. Google 
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] #Some website allows only browsers to view them. So this is a trick(hack) which will be required for accessing such websites. 

現在,當你提交你應該能夠重定向到頁面擔保記錄形式的Python代碼沒有你被註銷。希望這能解決你的問題。

+0

謝謝你這一點,但我不知道有關Python。我不知道它是什麼或它如何適合Perl腳本。你可以使用WWW :: Mechanize的Perl實現來解釋它嗎? – user3218875