【发布时间】:2016-04-09 02:00:58
【问题描述】:
我想使用 python/mechanize 来控制我的调制解调器/路由器盒。虽然我可以登录并浏览菜单,但我无法更改任何值(浏览器提交无效)。这些页面使用 javascript,但我认为我在脚本中使用 mechanize 进行了等效操作。可能是因为 antiCSRF.js 文件包含阻止我更改任何值吗?
页面的html/js代码:
<head>
<script type="text/javascript">
function main_reboot_button()
{
var confrm = confirm("Do you want to continue...")
if(confrm){
document.getElementById("main_reboot").value = "1";
document.getElementById("main-reboot-form").submit();
return false;
}
else {
return false;
}
}
</script>
</head>
<body>
<div class="panel-body panel-align">
<div class="panel panel-default accor_brd accor_brd_RB_Curved content_blk">
<form method="post" action="bbox-maintenance.lp" id="main-reboot-form" style="padding-top:20px;">
<div class="control_blk clearfix">
<input type="hidden" name= "main_reboot" id="main_reboot" value="0"></input>
<label for="input01" class="control-label txt-head">Reboot Modem</label>
<button class="btn_proximus_standalone" onclick='return main_reboot_button()'>Restart</button>
</div>
</form>
</div>
</div>
</body>
<script type='text/javascript' src='js/antiCSRF.js'></script>
antiCSRF.js 文件:
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
var forms=document.getElementsByTagName("form");
var rn = readCookie('xAuth_SESSION_ID');
for (var i=0; i<forms.length; i++)
{
var temp = document.createElement("INPUT");
temp.type = "hidden";
temp.name = "rn";
temp.value = rn;
forms[i].insertBefore(temp, forms[i].firstChild);
}
我用来发出请求的python代码部分(登录后):
browser.open("http://192.168.1.1/bbox-maintenance.lp")
browser.select_form(nr = 0)
browser.form.find_control("main_reboot").readonly = False
browser.form['main_reboot'] = "1"
browser.submit()
因此,该盒子没有重新启动,而它本应重新启动。 python脚本没有显示错误。
【问题讨论】:
标签: javascript python mechanize csrf