我正在尝试使用Ruby从uptobox.com下载我自己的文件。但是当显示验证码时我被卡住了(这只是用一些Javascript生成的span
html标签中的随机数字)。我认为下载计时器也可能存在一些问题。在第3页上,它显示"wrong captcha"
require 'rubygems'
require 'mechanize'
agent = Mechanize.new
page1 = agent.get("http://uptobox.com/pzlw7p8d651h")
form_page1 = page1.forms.first
page2 = form_page1.submit(form_page1.button_with(:name => "method_free"))
form_page2 = page2.form_with(:name => "F1")
captcha = page2.parser.search("td[@align='right']/div").inner_text
form_page2.field_with(:name => "code").value = captcha
p form_page2
// 60s has to pass before the button is enabled. the prog waits 70s
timeToWait = (page2.parser.search("*[id='countdown_str']/span").text).to_i + 10
p Time.now.getutc
sleep(timeToWait)
p Time.now.getutc
button = form_page2.button_with(:value => "Create Download Link")
page3 = agent.submit(form_page2,button)
p page3.content
我做错了什么?
答案 0 :(得分:0)
如果您使用...search("td[@align='right']/div").inner_text
,您的验证码将始终不正确。因为该页面使用padding-left
来更改验证码中的字符序列。
要做到正确,您需要按升序提取padding-left
的值,然后使用实际的inner_text。
e.g。
<span style="position:absolute;padding-left:28px;padding-top:4px;">4</span> #=> 2nd
<span style="position:absolute;padding-left:9px;padding-top:7px;">3</span> #=> 1st
<span style="position:absolute;padding-left:44px;padding-top:6px;">9</span> #=> 3rd
<span style="position:absolute;padding-left:62px;padding-top:3px;">7</span> #=> 4th