我的目标:在 ROR 3 上,从需要您登录的站点获取 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/