机械化'link_with'生成不同的网址

时间:2017-11-01 04:14:50

标签: ruby liferay mechanize portlet

我访问了一个包含此链接的页面:

<a class="portletpage-portlet-title is-active" tabindex="0" title="Registration" data-ppid="registration_WAR_registration" href="#registration">Registration</a>

页面使用SSL加密。 HTML属性href#registration。我正在尝试按照此链接访问URL:

www.redacted.com/#registration

这是我的代码:

agent.get('*redacted*'). do |page|
page.form_with(:action => '*redacted*') do |f|
    f.field_with(:id => 'username').value = get_username()
    f.field_with(:id => 'password').value = get_password()
end.click_button

agent.page.link_with(:text => 'Registration').click

点击链接时,会产生以下错误:

`fetch': 404 => Net::HTTPNotFound for https://*redacted*/group/1403104853945/academics?p_p_id=registration_WAR_uofsregistration&p_p_state=maximized -- unhandled response (Mechanize::ResponseCodeError)
    from /home/mike/.rvm/gems/ruby-2.4.1/gems/mechanize-2.7.5/lib/mechanize.rb:464:in `get'
    from /home/mike/.rvm/gems/ruby-2.4.1/gems/mechanize-2.7.5/lib/mechanize.rb:348:in `click'
    from /home/mike/.rvm/gems/ruby-2.4.1/gems/mechanize-2.7.5/lib/mechanize/page/link.rb:30:in `click'
    from u-of-s-scraper.rb:34:in `<main>'

并提供了网址:

www.redacted.com/group/1403104853945/academics?p_p_id=registration_WAR_uofsregistration&p_p_state=maximized

我不确定Mechanize在哪里获取URL。该链接具有属性data-ppid,该属性似乎对该URL有贡献。任何人都可以提供一些见解吗?

事实证明,该页面是使用Liferay的Portlet编写的。不幸的是,Portlet不能直接访问URL,因此我目前正在研究一种不同的抓取页面的方法 - 可能是Selenium或PhantomJS。

2 个答案:

答案 0 :(得分:0)

data-ppid是一个数据属性,应该由JavaScript处理。更改URL可能是由于客户端的一些Javascript代码(以及服务器端的重定向)。

答案 1 :(得分:0)

以#开头的链接是“命名链接”或“书签链接” - 它们不会去任何地方,只是跳到页面上的某个位置。

换句话说,没有理由“跟随”机械化这样的链接。