问题:给定一个aspx.net页面,其提交是通过图片点击与提交按钮,如何模拟被点击的图像以发布表单。
后台:我需要针对网站运行一些计划任务(我无法更改代码)。使用RoboBrowser,我可以登录该站点并通常浏览页面。但是,我有一个案例,用户可以通过点击两个图像之一来打开/关闭某些东西。该表单有一个隐藏的提交按钮,可以自动注销用户(不知道为什么),所以我不能使用browser.submit_form。我已经捕获了fiddler中图像点击产生的流量,需要在代码中模拟它,但我并不完全确定最好的方法。
系统:Python 3.4,RoboBrowser,基于旧aspx.net技术构建的网站
HTML 对于单击的图片(注意,RainSwitch只验证是否进行了选择)
<input src="images\raindrop.jpg" name="imgRainSelect" type="image" id="imgRainSelect" onclick="return RainSwitch();">
<input src="images\sunsphere.jpg" name="imgAutoSelect" type="image" id="imgAutoSelect" onclick="return RainSwitch();">
在Fiddler看到POST
__EVENTARGUMENT
__EVENTTARGET
__EVENTVALIDATION /wEWFwLD1ZzCCgKKvpK.........
__VIEWSTATE /wEPDwULLTEyODYzNjEw.........(really long)
__VIEWSTATEGENERATOR 59D0C8B1
imgAutoSelect.x 77
imgAutoSelect.y 77
rpt1$ctl00$chk 6224
rpt1$ctl00$DropDownListRainShutdownDays 0
一般性思考:
谢谢,
SteveJ
答案 0 :(得分:0)
我很想完全删除这个问题,因为它没有引起很大的兴趣。但是,我无法在任何地方找到帮助,所以我认为有一天可能会为某人节省很多工作(如果只有一个人)。
我最终不得不制定另一篇文章,并在数据中添加视图状态信息。
browser.open(url,method =&#39; post&#39;,data = self._get_form_post_data())
def _get_form_post_data(self):
form = self.browser.get_form('Form1')
view_state = form['__VIEWSTATE']
generator = form['__VIEWSTATEGENERATOR']
validation = form['__EVENTVALIDATION']
data = dict(
__EVENTTARGET="",
__EVENTARGUMENT="",
__VIEWSTATE=view_state.value,
__VIEWSTATEGENERATOR=generator.value,
__EVENTVALIDATION=validation.value,
)
data['rpt1$ctl00$chk'] = '6224'
data['rpt1$ctl00$DropDownListRainShutdownDays'] = '0'
return data
Fiddler是一个很棒的工具,可以帮助我找到我需要发布的内容,所以firefox&#39;开发工具。