如何使用curl在Javascript中提交投票并获得结果?

时间:2011-12-12 15:36:23

标签: javascript curl applescript

这是我的问题:我被要求开发一个脚本,用于获取某位艺术家在Q102的Jingle Ball页面上的投票百分比,解析它并发布当前百分比以及艺术家的名字。推文的API是在AppleScript中完成的,它已经发送了一个我传递给它的自定义字符串。我现在唯一需要的是获取构建字符串的值。

现在,我尝试通过终端做一个简单的卷曲:

curl http://www.q102.com/pages/jb-brackets/

问题是,在任何民意调查中,当我卷曲时它甚至都没有得到输入类型(如果你访问页面并尝试投票,它们就是单选按钮),它只是在我卷曲时为艺术家显示这个'ed it(每个民意调查都有一个特定的ID - 这是包含我需要获取的数据的民意调查)。

    <tr>
    <td rowspan="3" class="poll-left"><p><b>Demi Lovato vs. <br>
      Avril Lavigne</b></p> 

<div id="start_poll_203988"></div>
<div id="poll_203988"></div>
<div id="stop_poll_203988">
<script language="javascript">
//<![CDATA[
 insertPoll2('203988');


//]]>
</script>

当您为某位艺术家投票并按“投票”时,它会显示当前的投票百分比,如下所示:

黛米洛瓦托主场迎战 艾薇儿拉维尼

黛米洛瓦托 49.88%

艾薇儿拉维尼 50.12%

我需要做的是提交投票并获取价值,因为统计数据仅在我提交投票后显示(在主页上)。投票后页面不会刷新。基本上,我需要的只是'49 .88%'和'50 .12%'(显然这些数据会有所不同)。

有没有办法用卷曲/其他东西做这个?

1 个答案:

答案 0 :(得分:1)

由于您使用的是JavaScript,因此有两种选择。分析JS以查看它正在做什么,然后手动发送这些请求,或者您需要控制支持JS的应用程序 - Web浏览器。

在此处查看有关第一个选项的信息:​​https://stackoverflow.com/a/8304040/991805

至于第二个,根据我所知,我能够使用Ruby控制的Firefox来使用它。

require 'rubygems'
require 'watir-webdriver'
require 'nokogiri'

browser = Watir::Browser.new
browser.goto('http://www.q102.com/pages/jb-brackets/')
browser.radios[-1].focus

(browser.radios.length / 2).times do |i|
  browser.radios[1].set
  browser.buttons[1].click
  browser.radios[0].focus
  sleep 0.5
end

temp = []
source = Nokogiri::HTML(browser.html)
source.css('.brackets tbody tr td div tbody table tbody tr td').each {|a| temp << a.text.strip!}

browser.close
puts temp

这将输出:

Big Time Rush
55.15 %
Flo Rida
44.85 %
Lady GaGa
44.22 %
Kelly Clarkson
55.78 %
Demi Lovato
50.19 %
Avril Lavigne
49.81 %
Justin Bieber
48.26 %
Train
51.74 %
David Archuleta
45.92 %
Jordin Sparks
54.08 %
Adam Lambert
53.56 %
Pitbull
46.44 %
Joe Jonas
54.16 %
All Time Low
45.84 %
Selena Gomez
50.37 %
Katy Perry
49.63 %

此脚本适用于Mac,需要运行以下两个宝石(库):watir-webdriver和Nokogori。和Firefox一样。

检查Ruby是否已安装ruby -v 检查gem是否已安装gem -v 安装库gem install watir-webdriver nokogiri 运行脚本ruby ratings.rb