python登录论坛

python登录论坛,python,login,phpbb3,typeerror,Python,Login,Phpbb3,Typeerror,我写这篇文章是为了尝试登录论坛(phpBB3) 然而,当我运行它时,它会出现 Traceback (most recent call last): File "C:/Users/Mike/Documents/python/test urllib2", line 4, in <module> page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata]) TypeError:

我写这篇文章是为了尝试登录论坛(phpBB3)

然而,当我运行它时,它会出现

Traceback (most recent call last):
  File "C:/Users/Mike/Documents/python/test urllib2", line 4, in <module>
    page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
TypeError: string indices must be integers

这不会抛出任何错误消息,它只给出3个空行。这是因为我试图从登录后消失的登录页面读取内容。如果是这样,我如何让它显示在点击登录后应该显示的索引。

您的URL字符串不应该是

"http://www.woarl.com/board/ucp.php?mode=login"[logindata]
但是


我想,因为[]代表数组,它需要一个整数。我可能错了,因为我没有使用太多Python。

在字符串http:…“和urlencoded数据
[loginda]
之间使用逗号怎么样?

您的行

page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
是语义无效的Python。你大概是说

page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login", [logindata])
其中有一个逗号分隔参数。然而,你真正想要的只是

page = urllib2.urlopen("http://www.woarl.com/board/ucp.php?mode=login", logindata)

无需尝试将logindata包含在列表中,也无需使用urlopen的最新版本,即urllib2库。

如果在logindata上键入,则可以看到它是一个字符串:

>>> import urllib
>>> logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
>>> type(logindata)
<type 'str'>
导入urllib >>>loginda=urllib.urlencode({'username':'x','password':'y'}) >>>类型(登录数据)
将其放在括号([])中会将其放在列表上下文中,这不是您想要的。

使用高级“机械化”模块会更容易。

无效有点模糊。它在语法上是有效的。它只是有一个类型错误,因为索引是URL编码的字典,而不是整数;我将我的回答编辑为“语义无效”,因为正如你所指出的,它在语法上是有效的。
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login", [logindata])
page = urllib2.urlopen("http://www.woarl.com/board/ucp.php?mode=login", logindata)
>>> import urllib
>>> logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
>>> type(logindata)
<type 'str'>