ruby-on-rails - 在抓取中,无法使用 Mechanize 登录

标签 ruby-on-rails ruby login web-scraping mechanize

我的目标:在 ROR 3 上,从需要您登录的站点获取 PDF 文件,然后才能下载它

我的方法:

  • 第一步:用Mechanize登录网站
  • 第 2 步:因为我已经登录,所以使用 Nokogiri 获取 PDF

  • 显然,登录没有成功,因为我调试时什么也没得到(很确定 nokogiri 部分运行良好,已经测试过)

    在我的代码下面:

    我的 Controller .rb
    begin
    
    # login to the scraped site:
    agent = Mechanize.new
    agent.get("http://elwatan.com/sso/inscription/inscription_payant.php")
    
    #look for the wanted form
    form = puts agent.page.parser.css('form')[1]
    
    #login
    agent.page.forms[1]["login"] = "my_login"
    agent.page.forms[1]["password"] = "my_password"
    agent.page.forms[1].submit
    
    
    #scrape with nokogiri
    docwatan = Nokogiri::HTML(open('http://www.elwatan.com/'))
    @watan = {}
    docwatan.xpath('//th/a').each do |link|
    @watan[link.text.strip] = link['href']
    end
    

    我的 View .rb
    <ul id= "list">  
    <% if @watan %>
    <% @watan.each do |key, value| %>
    <li class="List" ><a href="http://www.elwatan.com/<%= "#{value}" %>" target='_blank'>      <%= "#{key}" %></a></li><% end %>
    <% end %>
    

    和登录表单,来自抓取的站点
    <form method="post" action="/sso/login.php" id="form-login-page">
    <div id="form-login-container-page" style="color:red;text-    align:center;width:100%;margin:10px 0"></div> 
    <input type="hidden" name="minimalist" value="1"><input type="hidden"    name="SSO_Context" value=""><div class="clear"> </div>
    <label>Email<span>*</span></label>
    <div class="insc-saisie">
    <input class="insc-saisie-champ" type="text" id="login-page" name="login" value="">
    </div>
    <div class="clear"> </div>
    
    <label>Mot de passe<span>*</span></label>
    <div class="insc-saisie">
    <input class="insc-saisie-champ" type="password" id="password-page" name="password"    value="">
    </div>
    <div class="clear"> </div>
    
    <label><input type="checkbox" unchecked=""></label>
    <div class="insc-saisie">Se souvenir</div>
    <div class="clear"> </div>
    
    <label> </label>
    <div class="insc-saisie">
    <a href="javascript:showLostPassForm();">Mot de passe oublié ?</a>
    </div>
    <div class="clear"> </div>
    
    <label> </label>
    <div class="insc-saisie">
    <input class="b-connexion" type="image" src="/img/trans.gif">
    </div>
    <div class="clear"> </div>
    <div class="clear"> </div>
    <label><span>*</span></label>
    <div class="insc-saisie">Saisie obligatoire</div>
    <div class="clear"> </div>
    </form>
    

    请注意,登录是在“http://elwatan.com/sso/inscription/inscription_payant.php”页面完成的,下载地址是“http://elwatan.com”;可能很重要

    提前致谢

    最佳答案

    代替:

    docwatan = Nokogiri::HTML(open('http://www.elwatan.com/'))
    

    你想做:
    docwatan = agent.get('http://www.elwatan.com/')
    

    否则 session cookie 不会在请求中发送。

    关于ruby-on-rails - 在抓取中,无法使用 Mechanize 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24091139/

    相关文章:

    ruby - Mettre des accents français dans des fichiers - 将法语口音放入 HTML 文件 (RoR)

    ruby - 你如何在 Ruby webapps 中进行性能测试?

    email - Web应用程序中 token 认证的最佳做法?

    ruby-on-rails - 使用 Heroku 扩展 Dynos

    ruby-on-rails - 未触发 ActiveRecord after_rollback 回调

    javascript - ExecJS::RuntimeError <%= javascript_include_tag 'application' , 'data-turbolinks-track' => true %>

    ruby-on-rails - 为什么会出现关联类型不匹配?

    ruby - 方法中无法访问类中的 ActiveModel::Serializer 实例变量

    ruby-on-rails - 设计登录失败消息

    twitter-bootstrap - Twitter Bootstrap 无法阻止下拉菜单在点击时关闭