Доступ к кнопке JavaScript с помощью Mechanize - PullRequest
2 голосов
/ 29 января 2011

Я пытаюсь загрузить данные о валютах с сайта Bloomberg с помощью mechanize / python. http://www.bloomberg.com/markets/currencies/

Мне удалось обновить поля до нужных валют, к сожалению, у меня проблема с "отправкой" кнопки конвертации.

Я не думаю, что br.submit () работает, и когда я пытаюсь использовать br.click, он говорит, что элемент не кликабелен. Вот HTML-код кнопки

<input type="button" value="Convert" class="btn w75" name="button" onclick="calculate(); return false;">

Кто-то предложил использовать br.form.action "" (http://bytes.com/topic/python/answers/764326-using-mechanize-python-navigate-website), но я не уверен, как бы это реализовать.

Итак, вот основная часть кода ...

br = mechanize.Browser() #initialized with and lets cookiejar handle all the cookies stuff
br.open('http://www.bloomberg.com/markets/currencies/')
br.form['from_tkc']=['USD:CUR']
br.form['to_tkc']=['BGN:CUR']
br.submit() .
print br.response().read()

К сожалению, в выходном html нет нужных мне данных - калькулятора валют, и я точно знаю, что кнопки обновляются. Кто-нибудь может указать мне правильное направление или помочь мне понять эту кнопку немного больше.

1 Ответ

1 голос
/ 29 января 2011

Это чистая форма JavaScript.Ничего не отправлено вообще, поэтому вы не можете получить доступ / отправить его с помощью Mechanize.

<form id="currcalc" onsubmit="calculate(); return false;" action="#">

http://www.bloomberg.com/javascripts/currencycalc_10.js - это JavaScript, стоящий за калькулятором, и вы можете найти данные о конверсии непосредственно в источнике HTMLстраница, содержащая форму:

  <script type="text/javascript">
//<![CDATA[
      var test_obj = new Object();
      var price = new Object();
                price['ADP:CUR'] = 122.244;
                price['AED:CUR'] = 3.67295;
                price['AFN:CUR'] = 45.33;
                price['ALL:CUR'] = 102.325;
...

Так что, если вы хотите «украсть» их данные о конверсиях, просто извлеките все строки, в которых заполняется массив цен (да, я знаю, что это технически объект!)

...