使用Mechanize访问JavaScript按钮

2 投票
1 回答
1907 浏览
提问于 2025-04-16 10:48

我正在尝试用 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

这是一个纯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;
...

所以如果你想要“偷”他们的转换数据,只需提取所有填充价格数组的行(是的,我知道它在技术上是一个对象!)。

撰写回答