2015-06-07 2 views
0

Мне нужно опубликовать данные на веб-сайте через программу. Для этого я использую Mechanize Nokogiri и Selenium. Вот мой код:Публикация данных на веб-сайте с использованием Mechanize Nokogiri Selenium

def aeiexport 
     # first Mechanize is submitting the form to identify yourself on the website 
     agent = Mechanize.new 
     agent.get("https://www.glou.com") 
       form_login_AEI = agent.page.forms.first 
       form_login_AEI.util_vlogin = "42" 
       form_login_AEI.util_vpassword = "666" 
       # this is suppose to submit the form I think 
       page_compet_list = agent.submit(form_login_AEI, form_login_AEI.buttons.first) 
       #to be able to scrap the page you end up on after submitting form 
       body = page_compet_list.body 
       html_body = Nokogiri::HTML(body) 
      #tds give back an array of td 
       tds = html_body.css('.L1').xpath("//table/tbody/tr[position()>1]/td") 
      # Checking my array of td with some condition 
       tds.each do |td| 
       link = td.children.first    # Select the first children 
       if link.html = "2015 32 92 0076 012" 
       # Only consider the html part of the link, if matched follow the previous link 
        previous_td = td.previous 
        previous_url = previous_td.children.first.href 
        #following the link contained in previous_url 
        page_selected_compet = agent.get(previous_url) 
        # to be able to scrap the page I end up on 
        body = page_selected_compet.body 
        html_body = Nokogiri::HTML(body) 
        joueur_access = html_body.search('#tabs0head2 a') 
        # clicking on the link 
        joueur_access.click 
        rechercher_par_numéro_de_licence = html_body.css('.L1').xpath("//table/tbody/tr/td[1]/a[1]") 
        pure_link_rechercher_par_numéro_de_licence = rechercher_par_numéro_de_licence['href'] 
        #following pure_link_rechercher_par_numéro_de_licence 
        page_submit_licence = agent.get(pure_link_rechercher_par_numéro_de_licence) 

        body_submit_licence = page_submit_licence.body 
        html_body = Nokogiri::HTML(body_submit_licence) 
        #posting my data in the right field 
        form.field_with(:name => 'lic_cno[0]') == "9511681" 

1) До сих пор, что вы думаете об этом коде Как вы думаете, есть ошибка там 2) Эта часть является один я на самом деле не уверен, что есть: разместил мои данные в правильном поле, но теперь мне нужно отправить его. Проблема в том, что кнопка, которую мне нужно щелкнуть, выглядит так:

<input type="button" class="button" onclick="dispatchAndSubmit(document.JoueurRechercheForm, 'rechercher');" value="Rechercher"> 

он вызывает функцию javascript onclick. Я запускаю Selenium для запуска события click. Тогда я в конечном итоге на другой странице, где нужно нажать еще несколько раз .. Я попытался это:

driver.find_element(:value=> 'Rechercher').click 
       driver.find_element(:name=> 'sel').click 
       driver.find_element(:value=> 'Sélectionner').click 
       driver.find_element(:value=> 'Inscrire').click 

Но до сих пор мне не удалось в размещении данных. Не могли бы вы рассказать мне, разрешит ли мне селен делать то, что мне нужно. Если я могу это сделать?

ответ

0

С первого взгляда ваш код может использовать меньше отступов и больше пробелов/пустых строк, чтобы отделить внутреннюю логику AEIexport (что должно быть изменено на aei_export, поскольку Ruby использует змеиный футляр для имен методов. для стиля рубинового кода here).

Помимо стиля вашего кода, ошибка, которую я обнаружил в начале вашего метода, использует неопределенную переменную page при определении form_login_AEI.

Для вашего второго вопроса я не знаком с Selenium; однако, поскольку он действительно использует настоящий веб-браузер, он может обрабатывать JavaScript. Watir - еще одно возможное решение.

Альтернативой может быть просмотр источника страницы (т. Е. В Firebug) и понимание того, что делает JavaScript на странице. Затем используйте Механизм, чтобы следовать по ссылке вручную.