0

I am using Mechanize Python as the web client to submit a form. However, I did not find a way to set the x,y of ImageButton in this form.

I have tried different ways:

1) the first is to find the control:

bt = frm.find_control('ImageButtonID')
bt.x = 88
bt.y = 10

2) the second one is to use a dictionary:

ctls = {}
ctls['ImageButton1.x'] = 88
ctls['ImageButton1.y'] = 10
data = urllib.urlencode(ctls)
br.open(url,data)

But none of the ways works, Is there any solution? thanks a lot

Here is the html code:

TITLE function EnterTo(){ if (window.event.keyCode == 13){ form1.submit(); } } function ChangeImage() { document.getElementById("yzm").src = document.getElementById("yzm").src+'?'; }

<input name="deptID" type="hidden" id="deptID" value="1" /> <input name="dateType" type="hidden" id="dateType" value="Today" />
<input name="timeType" type="hidden" id="timeType" value="AM" />

<div class="numberBG">
<div class="Repeater">
    <table class="Item">

    <tr>
        <td>
                                    <input type="image" name="Repeater1$ctl00$ImageButton1" id="Repeater1_ctl00_ImageButton1" title="XXXXXXXX" src="images/1_1.jpg" style="border-width:0px;" />
        </td>
    </tr>
</table>        
<table class="table">
    <tr>
        <td style="width:100px;" class="txt">the code</td>
        <td style="width:90px;"><input name="Txt_Yzm" type="text" id="Txt_Yzm" onkeydown="if(event.keyCode==13)event.keyCode=9 " style="width:90px;" />
        <td style="width:50px;"><img src="../../gif.aspx?" id="yzm" onclick="ChangeImage();" alt="try again" style="width:50px;height:24px"></td>
        </tr>
    <tr>
    <td colSpan="3" style="width:240px;"><select name="DropDownList1" id="DropDownList1" style="width:240px;">

From the Chrome, I find the post data is

__VIEWSTATE=%2FwEPDwUJMjE0NzU0MTk4D2QWAmYPZBYIAgMPDxYCHgRUZXh0BQnotKLliqHpg6hkZAIEDw8WAh8ABRfnlKjmiLfvvJo1NTczL%2BWImOWtpuS6rmRkAgUPFgIeC18hSXRlbUNvdW50AgQWCGYPZBYEAgEPDxYCHwAFLOWFseWPluWPt1s3NV3lvZPliY3lj7dbMTAyMF3nrYnlvoXkurrmlbBbNTVdZGQCAw8PFgYeD0NvbW1hbmRBcmd1bWVudAUBMR4ISW1hZ2VVcmwFDmltYWdlcy8xXzEuanBnHgdUb29sVGlwBRLnu7zlkIjmiqXplIDkuJrliqFkZAIBD2QWBAIBDw8WAh8ABSrlhbHlj5blj7dbMV3lvZPliY3lj7dbMjAwMV3nrYnlvoXkurrmlbBbMV1kZAIDDw8WBh8CBQEyHwMFDmltYWdlcy8xXzIuanBnHwQFDOW8gOelqOS4muWKoWRkAgIPZBYEAgEPDxYCHwAFKuWFseWPluWPt1sxXeW9k%2BWJjeWPt1szMDAxXeetieW%2BheS6uuaVsFswXWRkAgMPDxYGHwIFATMfAwUOaW1hZ2VzLzFfMy5qcGcfBAUS5Z%2B65bu65oql6ZSA5Lia5YqhZGQCAw9kFgQCAQ8PFgIfAAUr5YWx5Y%2BW5Y%2B3WzE1XeW9k%2BWJjeWPt1s0MDEzXeetieW%2BheS6uuaVsFsyXWRkAgMPDxYGHwIFATQfAwUOaW1hZ2VzLzFfNC5qcGcfBAUV5YCf5qy%2B44CB6Jaq6YWs5Yqz5YqhZGQCBw8QZBAVABUAFCsDAGRkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYGBRxSZXBlYXRlcjEkY3RsMDAkSW1hZ2VCdXR0b24xBRxSZXBlYXRlcjEkY3RsMDEkSW1hZ2VCdXR0b24xBRxSZXBlYXRlcjEkY3RsMDIkSW1hZ2VCdXR0b24xBRxSZXBlYXRlcjEkY3RsMDMkSW1hZ2VCdXR0b24xBQtQcmludEJ1dHRvbgUKQmFja0J1dHRvbpwJ7xuebnfVXIs68Z0mpioF3Dpy&Repeater1%24ctl00%24ImageButton1.x=74&Repeater1%24ctl00%24ImageButton1.y=19&Txt_Yzm=&__EVENTVALIDATION=%2FwEWCwLc%2Bdl4AqPSn9wLAuqo1NQIAq3v2K8JAtW984UHAtDAyPwJAuP1ziAC3oKsnQsC5NXi8AQCw9v50gkCz6%2BuzAH2E8Hvp9iYVUtn77jo3FKnheOfhg%3D%3D

xueliang liu
  • 556
  • 3
  • 13

2 Answers2

0

From the look of the HTML mechanize can't handle submitting of this form. As you already know which data to post try to do it manually by using urllib and urllib2 to post data:

import urllib
import urllib2
url = 'http://example.com'
form_data = {'field1': 'value1', 'field2': 'value2'}
params = urllib.urlencode(form_data)
response = urllib2.urlopen(url, params)
data = response.read()
4d4c
  • 8,049
  • 4
  • 24
  • 29
0

I find the reason of HTTP error in my problem. Since in python urllib, the "keep-alive" feature is not supported, and the obtained cookie is not valid in the following interaction. I use the cookie obtained in IE to run the code, and get the desired result!

By the way, Fiddler is an amazing Tool to debug HTTP request.

xueliang liu
  • 556
  • 3
  • 13