我正在尝试抓取以下网站:
如果您单击表格右上角标题为“导出数据”的小按钮,则会运行 JavaScript 脚本,并且我的浏览器会下载 .csv 格式的文件。我希望能够编写一个 PhantomJS 脚本来自动执行此操作。有任何想法吗?
上面的按钮被编码成 HTML,如下所示:
<a id="LB_cmdCSV" href="javascript:__doPostBack('LB$cmdCSV','')">Export Data</a></div>
我还在HTML源代码中发现了这个函数:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
我对 PhantomJS/Javascript 非常陌生,可以在这里使用一些指针。我想我已经找到了自动执行此操作所需的所有信息(如果我错了,请纠正我),但只是不确定从哪里开始编码。谢谢你的帮助。
编辑 - 这就是我的脚本现在的样子:
var page = new WebPage();
url = 'http://www.fangraphs.com/leaders.aspx?pos=all&stats=bat&lg=all&qual=0&type=8&season=2011&month=0&season1=2011&ind=0&team=0&rost=0& players=0';
page.open(encodeURI(url), function (status){
if (status !== "success") {
console.log("Unable to access website");
} else {
page.evaluate(function() {
__doPostBack('LB$cmdCSV', '');
});
}
phantom.exit(0);
});
对我来说非常有效的是模拟鼠标在所需元素上的点击。
page.evaluate(function () {
var btn = document.getElementById('LB_cmdCSV')
var ev = document.createEvent('MouseEvent')
ev.initEvent('click', true, true)
btn.dispatchEvent(ev)
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)