在提交表单之前机械化检查所有单选按钮

问题描述 投票:0回答:1

[对于一个学校项目,我正在尝试刮除多项选择题的内容(以学习法语SAT。screenshot of the webpage that I want to scrap

我的刮板有效。但是,该页面使用javascript来获取前5个问题,然后您需要回答每个问题并单击下一步按钮,然后您才能访问5-10个问题。

[在检查器中,我比较了两个html文档(在单击单选按钮+ next按钮之前和之后),我将两个文件都放在帖子的末尾(第一个html文档的形式为type =“ get”,而第二个具有类型“ post”的形式)

因此,我使用了Mechanize宝石,并尝试单击所有输入,然后单击按钮。可悲的是,它不起作用,在使用Mechanize运行代码之前和之后,我似乎都具有相同的html文件。

require 'open-uri'
require 'nokogiri'
require 'json'
require 'mechanize'

url = 'https://www.letudiant.fr/quiz/bac/histoire-geographie/quiz-bac-histoire-geographie-l-es-s-l-asie-du-sud-et-de-l-est-les-enjeux-de-la-croissance/question.html'

agent = Mechanize.new
page = agent.get(url)
form = agent.page.form_with(:class => "c-form")
form.radiobuttons.each do |button|
  button.check
end

# check if button.checked?
puts "============"
form.radiobuttons.each do |button|
  puts button.checked?
end
puts "============"


puts "************"

page = agent.submit(form)
puts page.parser.text
puts "************"

这将在控制台中返回:意思是机械化单击每个单选按钮(每个问题有3个单选按钮,因此机械化了对所有单选按钮的单击,但是仅剩下的最后一个(针对每个问题)被单击,解释了false-false-true每个问题重复)like here

============
false
false
true
false
false
true
false
false
true
false
false
true
false
false
true
============
************
#<Mechanize::Page:0x00007fb942c50e38>




        Test Quiz Bac L/ES/S - Histoire-Géographie  - L'Asie du Sud et de l'Est - L'Etudiant




                                                                       Quiz  Bac        Quiz Bac L/ES/S - Histoire-Géographie - L'Asie du Sud et de l'Est                Étape 1         Étape 2                 1) Mumbai est :              Veuillez sélectionner une réponse.                a) la capitale politique de l’Union indienne.               b) la capitale économique et culturelle de l’Union indienne.               c) la capitale culturelle de l’Union indienne.                 2) Que sont les slums ?              Veuillez sélectionner une réponse.                a) Le nom des bidonvilles en Inde.               b) Le nom des quartiers aisés en Inde.               c) Le nom des décharges en Inde.                 3) Comment évolue la population de l’agglomération de Mumbai ?              Veuillez sélectionner une réponse.                a) Une croissance lente.               b) Une stagnation.               c) Une croissance rapide.                 4) Quelle est la part de la population de l’Asie du Sud et de l’Est dans la population mondiale ?              Veuillez sélectionner une réponse.                a) 2/3.               b) 1/4.               c) 1/2.                 5) Que signifie « PMA » ?              Veuillez sélectionner une réponse.                a) Pays mal avancés.               b) Pays les moins avancés.               c) Pays mal adaptés.                            
 ##################
Attention ! Veuillez répondre à toutes les questions.
#######################
                          Étape suivante                                                                          Articles les plus lus              Bac S 2018 : tous les sujets et corrigés               Grand oral du nouveau bac : ce qui vous attend               On connaît la liste des œuvres au programme du bac de français 2020               Pourquoi prendre latin ou grec en option en terminale ?               Complémentaires ou expertes, à quoi ressembleront les options maths en terminale ?               Bac STMG 2018 : tous les sujets et corrigés               Nouveau bac : vous aurez les résultats des E3C le 15 mars               Que se passera-t-il si vous ratez votre bac en 2020 ?               Bac 2019 : les citations à (bien) utiliser à l’épreuve de philo               E3C : ce que vous risquez si vous les manquez           window._taboola = window._taboola || [];  _taboola.push({  mode: 'thumbnails-right-rail',  container: 'taboola-right-rail-thumbnails',  placement: 'Right Rail Thumbnails',  target_type: 'mix'  });                                 

                            Quiz Bac L/ES/S - Histoire-Géographie  - L'Asie du Sud et de l'Est                        

************

[注意!Veuillezrépondreà吹捧问题。“在控制台中的######之间,表示Mechanize尝试提交表单,但没有单击每个单选按钮Like here when I try to click without having clicked on the radiobuttons

这里是代码(在检查器中找到),然后单击每个单选按钮并单击下一个按钮:

<form class="c-form has-error" method="post" data-frm="quiz" data-frm-legacy-final-step-action="/test/quiz/validation.html?time=1583184886" data-frm-init="1">
   <div data-sln-scrollnav="" data-eng-scrollable="" class="c-scrollnav has-more-on-right">
      <nav class="c-simple-nav c-scrollnav__scroller" data-sln-scroller="">
         <ul class="  c-simple-nav__list  c-simple-nav__list--progress " data-sln-inner="">
            <li class="c-simple-nav__item">  <a class="  c-simple-nav__link  is-active is-clickable " href="#" data-frm-legacy-multi-step="Etape 1">  Étape 1 </a>  </li>
            <li class="c-simple-nav__item">  <a class="  c-simple-nav__link  " href="#" data-frm-legacy-multi-step="Etape 2">  Étape 2 </a>  </li>
         </ul>
      </nav>
   </div>
   <ol class="c-quiz__question-list">
      <li class="c-quiz-question has-error" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  1) Mumbai est : </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21887" value="66881">   <span class="c-radio-label__label">  a) la capitale politique de l’Union indienne. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21887" value="66883">   <span class="c-radio-label__label">  b) la capitale économique et culturelle de l’Union indienne. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21887" value="66885">   <span class="c-radio-label__label">  c) la capitale culturelle de l’Union indienne. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
      <li class="c-quiz-question has-error" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  2) Que sont les slums ? </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21889" value="66887">   <span class="c-radio-label__label">  a) Le nom des bidonvilles en Inde. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21889" value="66889">   <span class="c-radio-label__label">  b) Le nom des quartiers aisés en Inde. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21889" value="66891">   <span class="c-radio-label__label">  c) Le nom des décharges en Inde. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
      <li class="c-quiz-question has-error" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  3) Comment évolue la population de l’agglomération de Mumbai ? </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21891" value="66893">   <span class="c-radio-label__label">  a) Une croissance lente. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21891" value="66895">   <span class="c-radio-label__label">  b) Une stagnation. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21891" value="66897">   <span class="c-radio-label__label">  c) Une croissance rapide. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
      <li class="c-quiz-question has-error" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  4) Quelle est la part de la population de l’Asie du Sud et de l’Est dans la population mondiale ? </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21893" value="66899">   <span class="c-radio-label__label">  a) 2/3. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21893" value="66901">   <span class="c-radio-label__label">  b) 1/4. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21893" value="66903">   <span class="c-radio-label__label">  c) 1/2. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
      <li class="c-quiz-question has-error" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  5) Que signifie « PMA » ? </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21895" value="66905">   <span class="c-radio-label__label">  a) Pays mal avancés. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21895" value="66907">   <span class="c-radio-label__label">  b) Pays les moins avancés. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21895" value="66909">   <span class="c-radio-label__label">  c) Pays mal adaptés. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
   </ol>
   <div class="c-form__errors">
      <div class="c-block-error">
         <div class="c-block-error__title">
            <div class="c-block-bubble c-block-bubble--error">
               <svg class="c-icon-svg" aria-hidden="true">
                  <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
               </svg>
            </div>
            Attention ! Veuillez répondre à toutes les questions.  
         </div>
      </div>
   </div>
   <input type="hidden" data-frm-legacy-multi-step-input="" name="step">  <input type="hidden" name="previousStep" value="">  <input type="hidden" name="nextStep" value="2">  <input type="hidden" name="idOrigine" value="1">  <input type="hidden" name="legacyFinalStepAction" value="/quiz/bac/histoire-geographie/quiz-bac-histoire-geographie-l-es-s-l-asie-du-sud-et-de-l-est-les-enjeux-de-la-croissance/conclusion.html?time=1583184886" ?="">   
   <div class="c-quiz__actions">
      <button class="c-button c-button--medium c-button--rounded c-button--light-border u-themed is-active u-typo--upper" type="button" data-frm-legacy-multi-step="next">
         <span>Étape suivante</span>  
         <svg class="c-icon-svg">
            <use xlink:href="/svg/etu.sprite.svg#icon-chevron-right"></use>
         </svg>
      </button>
   </div>
</form>

这是我想获取的html代码(单击每个单选按钮并单击下一个按钮后,在检查器中找到:

<form class="c-form" method="post" data-frm="quiz" data-frm-legacy-final-step-action="/test/quiz/validation.html?time=1583187387" data-frm-init="1">
   <div data-sln-scrollnav="" data-eng-scrollable="" class="c-scrollnav has-more-on-right">
      <nav class="c-simple-nav c-scrollnav__scroller" data-sln-scroller="">
         <ul class="  c-simple-nav__list  c-simple-nav__list--progress " data-sln-inner="">
            <li class="c-simple-nav__item">  <a class="  c-simple-nav__link  is-clickable " href="#" data-frm-legacy-multi-step="Etape 1">  Étape 1 </a>  </li>
            <li class="c-simple-nav__item">  <a class="  c-simple-nav__link  is-active is-clickable " href="#" data-frm-legacy-multi-step="Etape 2">  Étape 2 </a>  </li>
         </ul>
      </nav>
   </div>
   <ol class="c-quiz__question-list">
      <li class="c-quiz-question" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  6) Parmi ces trois États, quel est celui dont la population croît la plus vite ? </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21897" value="66911">   <span class="c-radio-label__label">  a) L’Inde. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21897" value="66913">   <span class="c-radio-label__label">  b) Le Japon. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21897" value="66915">   <span class="c-radio-label__label">  c) La Chine. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
      <li class="c-quiz-question" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  7) Lequel de ces États est une démocratie ? </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21899" value="66917">   <span class="c-radio-label__label">  a) La Chine. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21899" value="66919">   <span class="c-radio-label__label">  b) L’Inde. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21899" value="66921">   <span class="c-radio-label__label">  c) La Corée du Nord. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
      <li class="c-quiz-question" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  8) Les relations économiques entre la Chine et le Japon se caractérisent par : </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21901" value="66923">   <span class="c-radio-label__label">  a) des conflits. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21901" value="66925">   <span class="c-radio-label__label">  b) de la concurrence. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21901" value="66927">   <span class="c-radio-label__label">  c) de la complémentarité. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
      <li class="c-quiz-question" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  9) À quelle instance la Chine refuse-t-elle la candidature du Japon ? </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21903" value="66929">   <span class="c-radio-label__label">  a) L’ONU. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21903" value="66931">   <span class="c-radio-label__label">  b) L’OMC. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21903" value="66933">   <span class="c-radio-label__label">  c) Le Conseil de sécurité de l’ONU. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
      <li class="c-quiz-question" data-frm-validate="[ 'required' ]">
         <h5 class="c-quiz-question__title">  10) Quel État est chargé d’assurer la protection militaire du Japon ? </h5>
         <div class="c-block-error">
            <div class="c-block-error__title">
               <div class="c-block-bubble c-block-bubble--error">
                  <svg class="c-icon-svg" aria-hidden="true">
                     <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
                  </svg>
               </div>
               Veuillez sélectionner une réponse.  
            </div>
         </div>
         <div class="c-quiz-question__options">
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21905" value="66935">   <span class="c-radio-label__label">  a) Le Royaume-Uni. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21905" value="66937">   <span class="c-radio-label__label">  b) Les États-Unis. </span>   
               <div class="c-radio__indicator"></div>
            </label>
            <label class="  c-radio-label u-themed  ">
               <input type="radio" name="question_21905" value="66939">   <span class="c-radio-label__label">  c) La Chine. </span>   
               <div class="c-radio__indicator"></div>
            </label>
         </div>
      </li>
   </ol>
   <div class="c-form__errors">
      <div class="c-block-error">
         <div class="c-block-error__title">
            <div class="c-block-bubble c-block-bubble--error">
               <svg class="c-icon-svg" aria-hidden="true">
                  <use xlink:href="/svg/etu.sprite.svg#icon-exclamation"></use>
               </svg>
            </div>
            Attention ! Veuillez répondre à toutes les questions.  
         </div>
      </div>
   </div>

编辑:我添加了一些代码和细节以更加精确,希望我的问题更容易理解。

ruby-on-rails ruby nokogiri screen-scraping mechanize
1个回答
0
投票

第2页上还有更多复选框。

© www.soinside.com 2019 - 2024. All rights reserved.