我想做的是访问本地netgear路由器上的流量表数据。登录它并单击链接很容易,但是理想情况下,我想要一个小应用程序,它位于系统托盘(Windows)中,可以在需要查看网络流量时进行检查。
我正在使用python尝试访问路由器的网页,但遇到了一些麻烦。我最初尝试修改一个脚本来重新启动路由器(在此处找到https://github.com/ncw/router-rebooter/blob/master/router_rebooter.py),但是它只是提供了原始的html,我需要在onload javascript函数已运行。在许多有关网页抓取的文章中都描述了这种类型的东西,建议人们使用硒。
我尝试了硒,遇到了两个问题。首先,它实际上会打开浏览器窗口,这不是我想要的。其次,它跳过了我通过HTTP身份验证所输入的内容,反正弹出了登录窗口。这是代码:
from selenium import webdriver
baseAddress = '192.168.1.1'
baseURL = 'http://%(user)s:%(pwd)s@%(host)s/traffic_meter.htm'
username = 'admin'
pwd = 'thisisnotmyrealpassword'
url = baseURL % {
'user': username,
'pwd': pwd,
'host': baseAddress
}
profile = webdriver.FirefoxProfile()
profile.set_preference('network.http.phishy-userpass-length', 255)
driver = webdriver.Firefox(firefox_profile=profile)
driver.get(url)
因此,我的问题是,在不启动可见的Web浏览器窗口的情况下实现我想要的最佳方法是什么?
更新:好的,我尝试了sircapsalot的建议并将脚本修改为:
from selenium import webdriver
from contextlib import closing
url = 'http://admin:[email protected]/start.htm'
with closing(webdriver.Remote(desired_capabilities = webdriver.DesiredCapabilities.HTMLUNIT)) as driver:
driver.get(url)
print(driver.page_source)
这可以修复正在加载的Web浏览器,但是认证失败。有什么建议么?
好的,我找到了解决方案,而且比我想象的要容易得多。我确实尝试了John1024的建议,并且能够使用wget从路由器下载正确的网页。但是我不喜欢wget将结果保存到文件中的事实,然后我必须打开并解析该文件。
最后,我回到了第一次尝试修改失败的原始reboot_router.py脚本。我的问题是我试图使其变得过于复杂。这是我最终使用的最终脚本:
import urllib2
user = 'admin'
pwd = 'notmyrealpassword'
host = '192.168.1.1'
url = 'http://' + host + '/traffic_meter_2nd.htm'
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, host, user, pwd)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
response = opener.open(url)
stuff = response.read()
response.close()
print stuff
这将从路由器中打印出整个流量表网页,并加载正确的值。然后,我可以接受它并解析出其中的值。这样做的好处是它没有需要安装的外部依赖项,如硒,wget或其他库。干净是好的。
谢谢大家的建议。没有他们,我不会得到这个答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句