2012-12-04 53 views
1

使這種方式,所有我需要做的就是輸入試圖繼承機械化的瀏覽器,並創建一個登錄方法

browser = MyBrowser() 
browser.login() 

讓我的Python腳本登錄的未來。這是我到目前爲止有:

import mechanize 
class MyBrowser(mechanize.Browser, object): 
    _username = 'username' 
    _password = 'password' 

    def __init__(self): 
     super(MyBrowser, self).__init__() 
     self.set_handle_robots(False) 
     self.set_proxies({"http" : "http://proxy.me.com:80"}) 

    def login(self): 
     self.open('http://login.mypage.com/') 
     self.select_form(nr=0) 
     self['name'] = self._username 
     self['pass'] = self._password 
     self.submit() 

我曾提出,工作正常使用相同的方法學登錄功能。但現在,當我打電話browser.login(),我得到這個:

self['name'] = self._username 
TypeError: 'MyBrowser' object does not support item assignment 

爲什麼不打電話select_form行爲相同的方式,當它是這樣的一個方法的一部分?

回答

0

self是MyBrowser類的一個對象。 您對self['name']self['pass']所做的操作是嘗試將值分配給self對象本身。

我假設你想在類中聲明變量,爲了做到這一點,你必須編輯您的代碼:

self.name = self._username 
self.pass = self._password 

編輯: 試試這個:

super(MyBrowser, self).name = self._username 
super(MyBrowser, self).password = self._password 
+0

非常感謝您的回答!不幸的是,這是行不通的。我想要做的就是讓它將這些值賦給應該是'self'對象的一部分,然後使用'self.select_form(nr = 0)' ' '這在這裏找到的模型:[使用機械化和分裂(下載3)用Python下載登錄保護的頁面](http://ubuntuincident.wordpress.com/2011/11/08/download-login-protected-pages-with -python-using-mechanize-and-splinter-part-3 /) – Andy

+0

@我編輯了我的答案。 – Lior

+0

閱讀該線索獲取更多信息: http://stackoverflow.com/questions/1021464/python-how-to-call-a-property-of-the-base-class-if-this-property-is-being -overw – Lior

1

我得到它了!!!

self.select_form(nr=0) 
self.form['name'] = self._username 
self.form['pass'] = self._password 
self.submit() 

非常感謝利奧爾,我真的很感激您對此的時間,無法得到它沒有你的幫助:)