Страница 1 из 1

Ruby, Mechanize, 403 error,POST или не POST вот в чем вопрос

Добавлено: 2012-10-16 1:00:34
ProFTP
есть участок html где нету ссылки, а класс есть class который кликабельный (как ссылка)

т.е. такого ввиду:

Код: Выделить всё

<span class='bla'>tsxr<span>
можно дли как-то указать в Mechanize чтобы он кликнул на эту ссылку?




порылся нашел такой код html:

Код: Выделить всё


         <form id="touchForm" action="/applicant/resumes/touch" method="POST">
                <input type="hidden" name="resume" value="269c232aff00e06e2f0039ed1f4b576d35595a" /></form>
                </div></div><div class="resume__autoupdate g-round m-round_5" onclick="&#10;     
                           return {types:['{HH}.Resume.UpdateTimer', '{HH}.Resume.Touch'],&#10;      
                                     '{HH}.Resume.UpdateTimer': {&#10;          
                                               wasUpdated:         '17573',&#10;                    toUpdate:           '',&#10; 
                        updateTimeout:      '14400000',&#10;     
                                       resumeLang:         'RU'&#10;      
                                                 },&#10;          
                             '{HH}.Resume.Touch': {&#10;      
                                           resume: '269c232aff00e06e2f0039ed1f4b576d35595a',&#10;    
                            retryTrl: 'Обновить еще раз'&#10;                }}&#10;       
                            
                            
        ">Опубликовано <span class="update__date HH-Resume-UpdateTimer-WasUpdated">полдня</span> назад
        <div class="HH-Resume-UpdateTimer-ToUpdate-Container g-hidden">Обновить можно через 
        <span class="HH-Resume-UpdateTimer-ToUpdate"></span></div><div class="update__status">
        <div class="update__status__error g-hidden HH-Resume-Touch-Error ">Не удалось обновить дату</div>
        <span class="g-switcher m-switcher_999 HH-Resume-Touch-Button">Обновить дату </span></div></div>
        <script type="text/javascript">






                (function(){
                    HH=window.HH||{};HH.cid=HH.cid?HH.cid+1:1;
                    document.write('<script id="c' + HH.cid + '"> </scr'+'i'+'pt>');
                    var c = document.getElementById('c' + HH.cid).previousSibling;
                    try { while (c.nodeType != 1 || c.tagName.toLowerCase() == 'script') c = c.previousSibling;
                    c.id = 'component_' + HH.cid;
                    HH.comps=HH.comps||[];HH.comps.push(c.id);
                    }catch(e){};
                })();



написал скрипт на ruby буби:

Код: Выделить всё

#!/usr/bin/ruby

require 'rubygems'
require 'hpricot'

require 'mechanize'

# require'Mechanize::Page::Link'

agent = Mechanize.new
agent.read_timeout = 60
#agent.idle_timeout = 60
agent.open_timeout = 60



page         = agent.get 'http://hh.ua/logon.do'
form         = page.form_with( :action => 'http://hh.ua/logon.do' )


username_field = form.field_with(:name => "username")
username_field.value = ""

password_field = form.field_with(:name => "password")
password_field.value = ""
#submit form


##http://hh.ua/applicant/resumes/touch?resume=269c232aff00e06e2f0039ed1f4b576d35595a&undirectable=true

page         = agent.post( 'http://hh.ua/applicant/resumes/touch', {'resume' => '269c232aff00e06e2f0039ed1f4b576d35595a', 'undirectable' => 'true'}  )


output = File.open("output.html", "w") { |file|  file << agent.page.body }












#http://mechanize.rubyforge.org/Mechanize/Page/Link.html#method-i-dom_class

   #agent.click page.link_with( :text => /Обновить дату/)

#[04:32:25.932] GET http://hh.ua/applicant/resumes/human_datetime?lang=RU&timeWasUpdated=1&timeToUpdate=14400 [HTTP/1.1 200 OK 63мс]

# page = agent.get 'http://hh.ua/resume/269c232aff00e06e2f0039ed1f4b576d35595a'

#page.link_with(:text => 'Обновить дату')

# page.link_with(:text => 'Обновить дату').click


# page.link_with( :dom_class => "HH-Resume-Touch-Button").click

#agent.click page.search("//span[@class='g-switcher m-switcher_999 HH-Resume-Touch-Button']/p/b")


#page = agent.get 'http://www.work.ua/jobseeker/my/resumes/edit-resume-info/?id=1471258'

#form         = page.form_with( :method => "POST" )

#username_field = form.field_with(:name => "data[name][1]")
#username_field.value = "Perl-программист (удаленно - ~100$, в офисе - ~2000?)"


#agent.submit(form)


### puts page.body 


#output = File.open("output.html", "w") { |file|  file << agent.page.body }

 
 
# STDIN.gets


# puts agent.inner_text;



#form = page.form_with(:method => //)
#form.file_upload_with(:name => "file").value = '/home/lord/LOR/12345.png'
#agent.submit form

выдало ошибка 403 как я понял, в интернете нашел что ошибка из-за того сервер хочет исключитально POST запрос

Код: Выделить всё

$ ./rhh.rb
/usr/lib/ruby/1.8/mechanize.rb:464:in `post_form': 403 => Net::HTTPForbidden (Mechanize::ResponseCodeError)
	from /usr/lib/ruby/1.8/mechanize.rb:357:in `post'
	from ./rhh.rb:31
получается что ruby точнее НЕ отсылает POST запрос? как сделать чтобы отсылало?

Re: Ruby, Mechanize, 403 error,POST или не POST вот в чем во

Добавлено: 2013-03-02 12:43:17
Alex Keda
дебажить, однако