标签: mechanize-ruby

调节/限速红宝石机械化

我需要规定一个Mechanize实例与API连接的频率(每2秒一次,因此限制连接到那个或更多)

所以这:

instance.pre_connect_hooks << Proc.new { sleep 2 }
Run Code Online (Sandbox Code Playgroud)

我原以为这会起作用,而且它确实有点但是现在该类中的每个方法都会睡2秒钟,好像机械化实例被触摸并被告知保持2秒.我将尝试使用post connect钩子,但很明显我需要更复杂的东西,但是我不知道在这一点上是什么.

代码是更多的解释,所以如果你有兴趣跟随:https://github.com/blueblank/reddit_modbot,否则我的问题涉及如何有效和高效地将Mechanize实例的速率限制在API指定的特定时间范围内(其中超出该限制会导致请求和禁止被删除).另外,我猜我需要更好地将一个机械化实例集成到我的班级,任何关于它的指针也会受到赞赏.

ruby mechanize mechanize-ruby

5
推荐指数
1
解决办法
984
查看次数

使用Ruby中的Mechanize选择List

我正在尝试使用Mechanize with Ruby设置选择列表的值.我可以使用选择列表导航到页面,使用.form方法获取表单,然后找到选择列表.

report_form =page.form('form1')
pp report_form.field_with(:name => "report_type")
Run Code Online (Sandbox Code Playgroud)

正确返回正确的对象.

但是,我仍然无法设置此字段的值!我试过了:

report_form.field_with(:name => "report_type").options.first.select
report_form.field_with(:name => "report_type").options[1].select
report_form.field_with(:name => "report_type").value = "Foo"
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

pp report_form.field_with(:name => "report_type")
Run Code Online (Sandbox Code Playgroud)

值字段仍为空.

有什么我想念的吗?提示?窍门?比在http://mechanize.rubyforge.org上生活的更好的机械化文档?

谢谢!

编辑:相关的HTML是:相关的HTML是:

<TD>
<select id="report_type" name="report_type">
    <option value="Foo1">Opt 1</option>
    <option value="Foo2">Opt 2</option>
    <option value="Foo3">Opt 3</option>
</select></TD>
Run Code Online (Sandbox Code Playgroud)

ruby mechanize mechanize-ruby

5
推荐指数
1
解决办法
5631
查看次数

如何从Mechanize :: Page的搜索方法获取Mechanize对象?

我正在尝试抓取一个网站,我只能依靠类和元素层次结构来找到正确的节点.但是使用我不能用来填写和提交表格等的Mechanize::Page#search退货Nokogiri::XML::Element.

我真的很想使用纯CSS选择器,但是对于类的匹配似乎也很简单_with.但是,:not(.class)与简单地使用CSS选择器相比,匹配的东西非常冗长,而我不知道如何匹配元素层次结构.

有没有办法将Nokogiri元素转换回Mechanize对象,甚至更好地直接从search方法中获取它们?

ruby nokogiri mechanize-ruby

4
推荐指数
1
解决办法
4806
查看次数

如何在Ruby中使用mechanize执行Head请求

我可以HEAD使用Faraday(Faraday.head url)执行请求,但我在当前项目中使用Mechanize.

我想从头(文件名)中获取一个值而不下载文件.Mechanize gem是否提供这样的选项?我正在使用v2.0.

ruby mechanize-ruby

4
推荐指数
1
解决办法
954
查看次数

机械化cookie_jar不保存会话令牌

我正在使用Mechanize根据用户的要求刮取受密码保护的网站.我正在尝试通过运行登录到站点的Rake任务来解除登录和搜索功能,并将cookie保存到数据库中,然后由后续的Mechanize请求重用.

我的问题是该cookie_jar.save方法不会将会话cookie /令牌保存到cookie文件中.这是一个演示这个的简单示例:

require 'mechanize'

# Setup Mechanize agents
agent1 = Mechanize.new
agent2 = Mechanize.new

# Fetch page and save cookies to local file
agent1.get ('http://www.my-secure-website.com')
agent1.post('http://www.my-secure-website.com/login', {
    'user[login]' => 'my_login',
    'user[password]' => 'my_password',
    'submit' => 'Login'
})

# Verify and save cookies
agent1.cookie_jar.save_as 'cookies'
p agent1.cookie_jar
# #<Mechanize::CookieJar:0x8cf60b8 @jar={"www.my-secure-website.com"=>{"/"=>{"JSESSIONID"=>JSESSIONID=1NqLRc4dm0Qp5465N82Zwz4N0yXxy5jP1pXpyKp9jG8ssX2nMp5q!-334818122}, "/login/"=>{"Account"=>Account=my_account_number}}, "evr.my-secure-website.com"=>{"/APBDBQ"=>{"JSESSIONID"=>JSESSIONID=A74D230DEAFF50098557FBE76DD2E0C5}}}


########################################################
# Now let's load cookies into the second Mechanize agent

# Version 1 - This works only partially. Session cookies are missing:
agent2.cookie_jar.load 'cookies'
p …
Run Code Online (Sandbox Code Playgroud)

ruby mechanize mechanize-ruby

4
推荐指数
1
解决办法
2989
查看次数

如何使用Ruby Mechanize设置POST请求的主体?

如何使用Ruby Mechanize gem设置POST请求的主体.我知道你能做到

mechanize.post(url, query, headers)
Run Code Online (Sandbox Code Playgroud)

但我想用JSON字符串设置POST请求的主体.那可能吗?所以,类似于jQuery这样的东西:

$.ajax({
    type: 'POST',
    url:  'myurl',
    data: "{'key1':'value1','key2':'value2'}",
    ...
});
Run Code Online (Sandbox Code Playgroud)

ruby mechanize-ruby

4
推荐指数
1
解决办法
6304
查看次数

有人知道Ruby Mechanize的缓存插件吗?

我有一个基于Mechanize的Ruby脚本来抓取一个网站.我希望通过缓存在本地下载的HTML页面,使整个加速这一"调整输出 - >运行 - >调整输出"循环更快.我不想只为这个脚本在机器上安装外部缓存.理想的解决方案是插入Mechanize并透明地缓存提取的页面,图像等.

有人知道会有这样做的图书馆吗?或者另一种实现相同结果的方法(脚本第二次运行得更快)?

ruby mechanize-ruby

3
推荐指数
1
解决办法
1226
查看次数

单击与Mechanize的xpath链接

我想点击我用xpath(nokogiri)选择的Mechanize的链接.

怎么可能?

    next_page = page.search "//div[@class='grid-dataset-pager']/span[@class='currentPage']/following-sibling::a[starts-with(@class, 'page')][1]"
    next_page.click
Run Code Online (Sandbox Code Playgroud)

问题是nokogiri元素没有点击功能.

我无法读取href(URL)并发送get请求,因为链接已定义onclick函数(无href属性).

如果那是不可能的,有哪些替代方案?

ruby xpath mechanize nokogiri mechanize-ruby

3
推荐指数
1
解决办法
4180
查看次数

机械化获取"Errno :: ECONNRESET:通过对等方重置连接 - SSL_connect"

我无法让Mechanize加载以前工作的页面 - 它可靠地失败并显示Errno: ECONNRESET: Connection reset by peer - SSL_connect消息.关于我应该尝试什么或者我应该看的细节的任何建议?(请参阅下面的"我尝试过的内容")

更新1

相关的SO帖子中提示,我尝试直接访问该网站Net::HTTP.当我设置时http.ssl_version = :TLSv1,我得到一个重定向而不是一个错误(应该是).所以我的问题变成:如何ssl_version从内部配置Net :: HTTP的底层参数Mechanize

谢谢...

症状:

$ rails console
>> a = Mechanize.new
=> #<Mechanize:0x007fd26789b8e0 ...>
>> p = a.get("http://sce.com")
# (...after a long pause...)
Errno::ECONNRESET: Connection reset by peer - SSL_connect
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:918:in `connect'
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:918:in `block in connect'
from /sandbox/usr/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:918:in `connect'
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
from /sandbox/usr/lib/ruby/2.0.0/net/http.rb:857:in `start'
from /sandbox/usr/lib/ruby/gems/2.0.0/gems/net-http-persistent-2.9/lib/net/http/persistent.rb:691:in `start'
from …
Run Code Online (Sandbox Code Playgroud)

ssl openssl net-http mechanize-ruby ruby-on-rails-4

3
推荐指数
1
解决办法
5698
查看次数

Twitter API与Web抓取?

首先,我想得到我的推特账号的所有关注者.我做了一些研究,发现我们可以使用:Nokogiri或Mechanize gems使用Ruby on rails进行网络抓取.我还有一个用于网页抓取的css选择器.现在,如果我查找它,HTML页面源不会显示该帐户的所有关注者.

我真的可以使用网页抓取代码来获取我的所有Twitter粉丝,还是应该使用Twitter API?

ruby twitter ruby-on-rails nokogiri mechanize-ruby

0
推荐指数
1
解决办法
1856
查看次数