【问题标题】:How to submit a poll in Javascript using curl and get the results?如何使用 curl 在 Javascript 中提交投票并获得结果?
【发布时间】:2011-12-12 15:36:23
【问题描述】:

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

现在,我尝试通过终端进行这样的简单卷曲:

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

问题是,在任何民意调查中,当我卷曲时它甚至都没有获得输入类型(如果您访问页面并尝试投票,它们是单选按钮),它只是在我卷曲时为艺术家显示'ed (每个民意调查都有一个特定的 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>

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

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

黛米·洛瓦托 49.88%

艾薇儿·拉维尼 50.12%

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

有没有办法用 curl/其他东西来做到这一点?

【问题讨论】:

  • stackoverflow.com/a/8304040/991805。否则,由于您需要模拟 JS,您将需要自动化 Web 浏览器并从那里获取信息。 (我可以很容易地用 Ruby 写这个......)
  • Kassym Dorsel,唯一的问题是我对 Ruby 的两件事一无所知...
  • 我可以发布 Ruby 代码吗?它使用 Watir-Webdriver 来控制 firefox 获取信息。
  • Kassym Dorsel,如果可以的话,我将不胜感激。

标签: javascript curl applescript


【解决方案1】:

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

在此处查看有关第一个选项的信息:​​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,需要以下两个 gem(库)才能运行:watir-webdriver 和 Nokogori。以及 Firefox。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多