使用Mechanize访问JavaScript按钮
我正在尝试用 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;
...
所以如果你想要“偷”他们的转换数据,只需提取所有填充价格数组的行(是的,我知道它在技术上是一个对象!)。