我正在尝试使用 Ghost.py 获取受密码保护的站点的 HTML 内容。
我必须访问的 Web 服务器具有以下 HTML 代码(我只将其剪切到重要部分):
网址:http: //192.168.1.60/PAGE.htm
<html>
<head>
<script language="JavaScript">
function DoHash()
{
var psw = document.getElementById('psw_id');
var hpsw = document.getElementById('hpsw_id');
var nonce = hpsw.value;
hpsw.value = MD5(nonce.concat(psw.value));
psw.value = '';
return true;
}
</script>
</head>
<body>
<form action="PAGE.HTM" name="" method="post" onsubmit="DoHash();">
Access code <input id="psw_id" type="password" maxlength="15" size="20" name="q" value="">
<br>
<input type="submit" value="" name="q" class="w_bok">
<br>
<input id="hpsw_id" type="hidden" name="pA" value="180864D635AD2347">
</form>
</body>
</html>
每次加载页面时,“#hpsw_id”的值都会发生变化。
在普通浏览器上,一旦您输入正确的密码并按回车键或单击“提交”按钮,您将进入同一页面,但现在显示的是真实内容。
网址:http: //192.168.1.60/PAGE.htm
<html>
<head>
<!–– javascript is gone ––>
</head>
<body>
Welcome to PAGE.htm content
</body>
</html>
首先我尝试使用 mechanize 但失败了,因为我需要 javascript。所以现在我正在尝试使用 Ghost.py 来解决它
到目前为止我的代码:
import ghost
g = ghost.Ghost()
with g.start(wait_timeout=20) as session:
page, extra_resources = session.open("http://192.168.1.60/PAGE.htm")
if page.http_status == 200:
print("Good!")
session.evaluate("document.getElementById('psw_id').value='MySecretPassword';")
session.evaluate("document.getElementsByClassName('w_bok')[0].click();", expect_loading=True)
print session.content
此代码未正确加载内容,在控制台中我得到:
回溯(最后一次调用):文件“”,第 8 行,文件“/usr/local/lib/python2.7/dist-packages/ghost/ghost.py”,第 181 行,包装器 timeout=kwargs.pop ('超时',无))文件“/usr/local/lib/python2.7/dist-packages/ghost/ghost.py”,第1196行,在wait_for_page_loaded'无法加载请求的页面',超时)文件“/ usr/local/lib/python2.7/dist-packages/ghost/ghost.py",第 1174 行,在 wait_for 中引发 TimeoutError(timeout_message) ghost.ghost.TimeoutError:无法加载请求的页面
两个问题...
1) 我怎样才能成功登录到受密码保护的站点并获得PAGE.htm的真实内容?
2)这个方向是最好的方法吗?或者我完全错过了一些能让事情更有效地工作的东西?
我正在使用 Ubuntu 伴侣。