Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图将mechanize'子类化;s浏览器并创建登录方法_Python_Oop_Mechanize - Fatal编程技术网

Python 试图将mechanize'子类化;s浏览器并创建登录方法

Python 试图将mechanize'子类化;s浏览器并创建登录方法,python,oop,mechanize,Python,Oop,Mechanize,所以这样我只需要打字 browser = MyBrowser() browser.login() 让我的python脚本将来登录。以下是我目前掌握的情况: import mechanize class MyBrowser(mechanize.Browser, object): _username = 'username' _password = 'password' def __init__(self): super(MyBrowser, self).

所以这样我只需要打字

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_表单作为这样一个方法的一部分时行为不一样?

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

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
我明白了

self.select_form(nr=0)
self.form['name'] = self._username
self.form['pass'] = self._password
self.submit()
非常感谢Lior,我真的很感谢你花时间在这件事上,如果没有你的帮助,我不可能得到它:)

我得到了

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

非常感谢Lior,我真的很感谢你花时间在这件事上,没有你的帮助我是不可能做到的:)

非常感谢你的回答!不幸的是,这不起作用。我试图做的是让它在我使用
self将表单分配给
self
对象之后,将这些值分配给表单,该表单应该是
self对象的一部分。根据这里找到的模型选择表单(nr=0)
I:阅读该线程了解更多信息:谢谢!我刚刚意识到是什么导致了您原始答案的错误:
self.pass=self.\u password
pass是一个保留字,它不允许我将其用作字段名,但这就是表单中的内容!:(我正在寻找避开保留字的方法……嗯,感谢您的回答!不幸的是,这不起作用。我试图做的是,在我使用
self将表单分配给它之后,让它将这些值分配给应该是
self
对象一部分的表单。选择表单(nr=0)
我基于这里找到的模型:阅读该线程了解更多信息:谢谢!我刚刚意识到是什么导致了您原始答案的错误:
self.pass=self.\u password
pass是一个保留字,它不允许我将其用作字段名,但这就是表单中的内容!:(我在寻找逃避保留语的方法……嗯