问题:给定一个 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
一般想法:
- 感觉就像我应该能够以与用户相同的方式单击图像,但是 browser.follow_link 给了我一个类型错误,该对象不可下标。我假设是因为图像没有 a=href。
- 我的下一个想法是,browser.open(url, method='post', data=data)我可以为数据制定大部分字段,但这是很多工作,我觉得因为这是一个常见的操作所以有必须是一种更简单的方法(我什至不确定它是否会起作用。)
- 我不一定需要您为我编写代码,只要让我走上正轨即可。
谢谢,
史蒂夫·J