import sys
from mechanize import ParseResponse, urlopen, urljoin
# replace this with the actual login page
# you'll need to do some research
uri = "http://theloginpage.com/"
response = urlopen(uri)
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
print form
form["username"] = "your username"
form["username"] = "password"
# form.click() returns a mechanize.Request object
# (see HTMLForm.click.__doc__ if you want to use only the forms support, and
# not the rest of mechanize)
print urlopen(form.click()).read()
多么有趣的问题。
虽然我确信ændrük 的答案可能会奏效,但我对让依赖桌面软件的东西来管理网络可用性略有反对。
我建议您使用Python 的 Mechanize 库。您可以通过以下方式从存储库安装它:
然后获取脚本。您需要首先找出您要提交的页面的结构。您需要找到您的表单来自哪里以及需要输入哪些字段才能提交。一旦你知道了,它真的就像写一个快速的小表单解析器和提交器一样简单。机械化完成所有繁重的工作。这是一个改编自他们关于表单的文档的快速示例:
根据他们的系统如何工作,这可能就足够了。当他们打开连接时,您可能必须绑定一些 cookie jarring 以保持会话处于活动状态,但从技术上讲,他们没有理由要求这样做。
然后你只需要将它绑定到网络系统中,它就会被调用。从中加载它
/etc/network/if-up.d
应该可以,但我建议您在代码前加上检查,以确保您确实位于登录工作的热点上。根据现有强制门户的类型,您可以通过使用 Wget(使用Tamper Data了解需要发送哪些数据)或使用 Firefox 中的iMacros脚本发送的 POST 请求进行身份验证。
您可以添加脚本以
/etc/network/if-up.d
使其在每次建立网络连接时运行。在执行任何操作之前让脚本验证您使用的网络iwconfig
,并确保使用启动命令,sudo -u yourusername
这样您就不会以 root 身份运行 Web 浏览器。