我需要规定一个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指定的特定时间范围内(其中超出该限制会导致请求和禁止被删除).另外,我猜我需要更好地将一个机械化实例集成到我的班级,任何关于它的指针也会受到赞赏.
我正在尝试使用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) 我正在尝试抓取一个网站,我只能依靠类和元素层次结构来找到正确的节点.但是使用我不能用来填写和提交表格等的Mechanize::Page#search退货Nokogiri::XML::Element.
我真的很想使用纯CSS选择器,但是对于类的匹配似乎也很简单_with.但是,:not(.class)与简单地使用CSS选择器相比,匹配的东西非常冗长,而我不知道如何匹配元素层次结构.
有没有办法将Nokogiri元素转换回Mechanize对象,甚至更好地直接从search方法中获取它们?
我可以HEAD使用Faraday(Faraday.head url)执行请求,但我在当前项目中使用Mechanize.
我想从头(文件名)中获取一个值而不下载文件.Mechanize gem是否提供这样的选项?我正在使用v2.0.
我正在使用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 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) 我有一个基于Mechanize的Ruby脚本来抓取一个网站.我希望通过缓存在本地下载的HTML页面,使整个加速这一"调整输出 - >运行 - >调整输出"循环更快.我不想只为这个脚本在机器上安装外部缓存.理想的解决方案是插入Mechanize并透明地缓存提取的页面,图像等.
有人知道会有这样做的图书馆吗?或者另一种实现相同结果的方法(脚本第二次运行得更快)?
我想点击我用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属性).
如果那是不可能的,有哪些替代方案?
我无法让Mechanize加载以前工作的页面 - 它可靠地失败并显示Errno: ECONNRESET: Connection reset by peer - SSL_connect消息.关于我应该尝试什么或者我应该看的细节的任何建议?(请参阅下面的"我尝试过的内容")
从相关的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) 首先,我想得到我的推特账号的所有关注者.我做了一些研究,发现我们可以使用:Nokogiri或Mechanize gems使用Ruby on rails进行网络抓取.我还有一个用于网页抓取的css选择器.现在,如果我查找它,HTML页面源不会显示该帐户的所有关注者.
我真的可以使用网页抓取代码来获取我的所有Twitter粉丝,还是应该使用Twitter API?