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

如何使用curl在Javascript中提交投票并获得结果?,javascript,curl,applescript,Javascript,Curl,Applescript,这是我的问题:我被要求开发一个脚本,获取某位艺术家在Q102的“叮当球”页面上的投票率,对其进行解析,并在推特上发布当前的投票率以及艺术家的姓名。tweet的API是在AppleScript中完成的,它已经发送了一个我传递给它的自定义字符串。我现在唯一需要的就是获取用于构建字符串的值 现在,我试着通过终端做一个简单的卷曲: curl http://www.q102.com/pages/jb-brackets/ 问题是,在任何投票中,当我卷曲时,它甚至没有得到输入类型(如果你访问页面并尝试投票,

这是我的问题:我被要求开发一个脚本,获取某位艺术家在Q102的“叮当球”页面上的投票率,对其进行解析,并在推特上发布当前的投票率以及艺术家的姓名。tweet的API是在AppleScript中完成的,它已经发送了一个我传递给它的自定义字符串。我现在唯一需要的就是获取用于构建字符串的值

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

curl http://www.q102.com/pages/jb-brackets/
问题是,在任何投票中,当我卷曲时,它甚至没有得到输入类型(如果你访问页面并尝试投票,它们是单选按钮),当我卷曲它时,它只是为艺术家显示这一点(每个投票都有一个特定的ID-这是包含我需要获得的数据的投票)


黛米·洛瓦托vs.
艾薇儿·拉维尼 //
当您投票给某位艺术家并按下“投票”键时,它会显示当前的投票百分比,如下所示:

黛米·洛瓦托vs。 艾薇儿·拉维尼

德米洛瓦托 49.88%

艾薇儿·拉维尼 50.12%

我需要做的是提交一个投票,并获得值,因为只有在我提交投票后(在主页上)才会显示统计数据。投票后页面不会刷新。基本上,我只需要“49.88%”和“50.12%”(显然,这些数据各不相同)


使用curl/其他东西有什么方法可以做到这一点吗?

因为您使用的是JavaScript,所以有两种选择。分析JS,看看它在做什么,然后手动发送这些请求,或者你需要控制一个支持JS的应用——一个web浏览器

有关第一个选项的信息,请查看此处:

至于第二个,根据我所知,我能够使用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
此脚本在Mac上工作,需要运行以下两个gem(库):watir webdriver和Nokogori。还有Firefox

检查Ruby是否已安装
Ruby-v
检查gem是否已安装
gem-v
安装库
gem安装watir webdriver nokogiri

运行脚本
ruby ratings.rb

。否则,由于您需要模拟JS,您将需要自动化web浏览器并从中获取信息。(我可以很容易地用Ruby写这个…)Kassym Dorsel,唯一的问题是我不知道Ruby的两件事…我仍然可以发布Ruby代码?它使用Watir Webdriver控制firefox来获取信息。Kassym Dorsel,如果您可以,我将非常感激。
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 %