Tag: 机械化

使用Mechanize和Nokogiri保存图像?

我正在使用Mechanize和Nokogiri来收集一些数据。 我需要保存每个请求随机生成的图片。 在我的尝试中,我被迫下载所有图片,但我唯一想要的是位于div#specific的图像。 此外,是否可以从中生成Base64数据,而无需保存或重新加载其来源? require ‘rubygems’ require ‘mechanize’ require ‘nokogiri’ a = Mechanize.new { |agent| agent.keep_alive = true agent.max_history = 0 } urls = Array.new() urls.push(‘http://www.domain.com’); urls.each {|url| page = a.get(url) doc = Nokogiri::HTML(page.body) if doc.at_css(‘#specific’) page.images.each do |img| img.fetch.save(‘picture.png’) end end }

使用ruby mechanize捕获超时错误

我有一个机械化function可以让我退出网站,但在非常罕见的情况下它会让我失望。 该function涉及转到特定页面,然后单击注销按钮。 偶尔机械化在进入注销页面或单击注销按钮时会出现超时,代码崩溃。 所以我进行了一次小规模的救援,它似乎正如第一段代码所示。 def logmeout(agent) page = agent.get(‘http://www.example.com/’) agent.click(page.link_with(:text => /Log Out/i)) end Logmeout with rescue: def logmeout(agent) begin page = agent.get(‘http://www.example.com/’) agent.click(page.link_with(:text => /Log Out/i)) rescue Timeout::Error puts “Timeout!” retry end end 假设我正确地理解了救援,即使只是点击超时,它也会做两个动作,所以为了提高效率,我想知道我是否可以在这种情况下使用proc并将其传递给代码块。 会这样的工作: def trythreetimes tries = 0 begin yield rescue tries += 1 puts “Trying again!” retry if tries /Log Out/i))} […]

如何在Rails中为Mechanize设置自定义用户代理

我知道您可以通过设置agent.user_agent_alias =’Linux Mozilla’来使用一组预定义的别名,但是如果我想设置自己的用户代理,因为我正在编写一个Web爬虫,并且想要识别它,对于我正在索引的网站。 就像Googlebot一样。 似乎有一个user_agent方法,但我似乎找不到任何关于它的function的文档。

单击Ruby Mechanize按钮

我有一个特别困难的forms,我试图点击搜索按钮,似乎无法做到这一点。 以下是页面源代码的表单代码: 我正在尝试执行标准的机械化点击操作: login_page = agent.click(homepage.link_with(:text => “Search”)) 这是因为按钮使用javascript吗? 如果是的话,有什么建议?

Ruby SSL错误 – sslv3警告意外消息

我正在尝试使用ruby脚本连接到服务器https://www.xpiron.com/schedule 。 但是,当我尝试连接时: require ‘open-uri’ doc = open(‘https://www.xpiron.com/schedule’) 我收到以下错误消息: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: sslv3 alert unexpected message from /usr/local/lib/ruby/1.9.1/net/http.rb:678:in `connect’ from /usr/local/lib/ruby/1.9.1/net/http.rb:678:in `block in connect’ from /usr/local/lib/ruby/1.9.1/timeout.rb:44:in `timeout’ from /usr/local/lib/ruby/1.9.1/timeout.rb:87:in `timeout’ from /usr/local/lib/ruby/1.9.1/net/http.rb:678:in `connect’ from /usr/local/lib/ruby/1.9.1/net/http.rb:637:in `do_start’ from /usr/local/lib/ruby/1.9.1/net/http.rb:626:in `start’ from /usr/local/lib/ruby/1.9.1/net/http.rb:1168:in `request’ from /usr/local/lib/ruby/1.9.1/net/http.rb:888:in `get’ from (irb):32 from /usr/local/bin/irb:12:in […]

无法使用Ruby Mechanize登录Amazon

我正在尝试使用Ruby gem Mechanize登录Amazon。 我总是被踢回登录页面而没有任何错误消息。 我想知道这是否是Mechanize的错误,或者亚马逊是否阻止了这种访问。 我有下面的代码,你可以测试。 @mechanizer = Mechanize.new @mechanizer.user_agent_alias = ‘Mac Safari’ @page = @mechanizer.get(“https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%3Fie%3DUTF8%26ref_%3Dpd_irl_gw&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.pape.max_auth_age=0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select”) form = @page.form_with(:id => “ap_signin_form”) field = form.field_with(:name => “email”) field.value = “fake@email.com” radiobutton = form.radiobutton_with(:name => ‘create’, :value => ‘0’) radiobutton.check button = form.button_with(:id => “signInSubmit”) @page = form.submit button 谢谢你的帮助。

为什么在Windows上使用Mechanize访问SSL站点失败,但在Mac上工作?

这是我用来连接SSL站点的代码。 require ‘mechanize’ a = Mechanize.new page = a.get ‘https://site.com’ 我正在使用Ruby 1.9.3和Mechanize 2.1pre1 +依赖。在Mac上,上面的代码工作并返回页面。在运行相同版本的Windows 7上,它给出了以下错误: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 恢复到Mechanize 2.0.1似乎解决了这个问题,但后来我too many connections reset by peer问题too many connections reset by peer困扰。 因此,这不是解决方案。 我已经尝试过a.verify_mode = false ,但这没有做任何事情。 我已经读过您可以使用以下命令关闭SSLvalidation: open(uri,:ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE) 如何在Mechanize中将其关闭? 为什么我只在Windows上出现此错误?

使用WWW:Mechanize将文件下载到磁盘而不先将其全部加载到内存中

我正在使用Mechanize来方便下载某些文件。 目前我的脚本使用以下行实际下载文件… agent.get(‘http://example.com/foo’).save_as ‘a_file_name’ 但是,在将完整文件转储到磁盘之前,会将其下载到内存中。 你如何绕过这种行为,直接下载到磁盘? 如果我需要使用WWW以外的东西:Mechanize那么我将如何使用WWW:Mechanize的cookies?

在Mechanize请求之间维护cookie

我正在尝试使用Ruby版本的Mechanize从票证管理系统中提取我的雇主的票证,我们正在远离那些不提供API的票证管理系统。 问题是,似乎Mechanize没有在post调用和下面显示的get调用之间保留cookie: require ‘rubygems’ require ‘nokogiri’ require ‘mechanize’ @agent = Mechanize.new page = @agent.post(‘http://.com/user_session’, { ‘authenticity_token’ => ”, ‘user_session[login]’ => ”, ‘user_session[password]’ => ”, ‘user_session[remember_me]’ => ‘0’, ‘commit’ => ‘Login’ }) page = @agent.get ‘http://.com///tickets/1′ puts page.title user_session是网站登录页面POST的URL,我已经确认这确实get我登录。但是从get调用返回的页面是’哎呀,你还没有登录!’ 页。 我已经validation了从post调用返回的页面上的click链接是有效的,但我实际上无法在没有JavaScript的情况下到达我需要去的地方。 当然,我已经使用相同的登录function在浏览器上成功完成了这项工作。 我究竟做错了什么?