你如何刮一个网页来检查你是否需要解决验证码

时间:2015-04-06 10:31:29

标签: ruby web-scraping nokogiri screen-scraping watir-webdriver

我正在使用' watir',' curb',' nokogiri',' esay_captcha_solver'我试图刮擦页面,以便我知道验证码是否已经出现,然后通过获取图像URL来解决它。但是,我不确定在if语句中放什么以及如何刮掉我需要的东西。

    #=> SIGN IN
    browser = Watir::Browser.new :ff
    browser.goto "https://soundcloud.com/login"
    browser.text_field(:id => "site-username").set "#{name}"
    browser.text_field(:id => "site-password").set "#{pass}"
    browser.button(:id => "log-in-submit-button").click
    if browser.body(:url => "https://soundcloud.com/login?captcha=true").text.include? (:id => "recaptcha_table")
        http = Curl.get("https://soundcloud.com/login?captcha=true") do |http|
        http.headers['User-Agent'] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0"

此if语句不起作用,因为它似乎无法读取文本...在浏览器中它只是在有验证码时停止。

      end
      puts http.form_str
      easy_c = EasyCaptchaSolver.new(image_url: "...")
      easy_c.captcha

我希望能够抓取图片网址,我不知道如何让nogokiri识别出用于抓取的HTML代码,然后输入图片网址。

    else
      browser.goto "http://soundcloud.com/you/sets"
    end

验证码html看起来像:

captch code

1 个答案:

答案 0 :(得分:1)

第1行 - 检查验证码是否存在

第二 - 获取验证码的网址

if browser.element(:id => 'recaptcha_image').exists?
    img_url = browser.image(:id => 'recaptcha_challenge_image').src
    easy_c = EasyCaptchaSolver.new(image_url: "#{img_url}")
    easy_c.captcha
end