【问题标题】:Mechanize check all radio buttons before form submit在表单提交之前机械化检查所有单选按钮
【发布时间】:2020-06-14 05:15:09
【问题描述】:

对于一个学校项目,我正在尝试抓取多项选择题的内容(为法语 SAT 学习。 screenshot of the webpage that I want to scrape

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

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

因此,我使用 gem 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 "************"

这会在控制台中返回:这意味着 Mechanize 点击了每个单选按钮(每个问题都有 3 个单选按钮,因此机械化点击了所有这些单选按钮,但只有最后一个仍然被点击(对于每个问题),解释了错误 - 错误 -每个问题的真实重复)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                        

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

句子“注意!Veuillez répondre à toutes les questions”。在控制台中的######之间,表示 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>

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

【问题讨论】:

  • 需要更多信息来帮助您解决这个问题...页面是否使用 Javascript 处理表单提交?在这种情况下,您可能会更轻松地使用 Selenium 等自动化浏览器,而不是像 mechanize 这样的 HTML 解析器。
  • 机械化应该可以做到。听起来“下一步”按钮不是 所以 mechanize 不会提交表单。尝试使用 form.button_with(:class=> "c-button").click 进行下一步,然后使用实际的提交按钮提交。
  • 欢迎来到 SO!请参阅“How to Ask”以及链接页面和“MCVE”。在寻求帮助调试时,我们需要在问题本身中复制问题的最小输入数据(HTML)。如果没有,您要求我们下载页面,确定哪个部分导致问题,然后编写一个工具来使用您的代码。我们还需要准确了解您对结果的期望。

标签: ruby-on-rails ruby nokogiri screen-scraping mechanize


【解决方案1】:

我发现并使用 Selenium 充当浏览器,从而执行我要求它执行的操作。它有点工作,我设法访问了页面的其余部分:

require "selenium-webdriver"

driver = Selenium::WebDriver.for :chrome
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"
driver.navigate.to url
driver.manage.window.maximize

sleep(3)
wait = Selenium::WebDriver::Wait.new(:timeout => 30)

name = wait.until {

  container = driver.find_elements(:class, "c-quiz-question")
  container.each do |element|
    puts element.text
  end

  puts "=========="

  radio_buttons = driver.find_elements(:class, "c-radio-label")
  radio_buttons.each do |button|
     button.click
  end

  puts "========="

  driver.find_element(:class, "c-button").click

}

这些是控制台中的结果:

1) Mumbai est :
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 ?
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 ?
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 ?
a) 2/3.
b) 1/4.
c) 1/2.
5) Que signifie « PMA » ?
a) Pays mal avancés.
b) Pays les moins avancés.
c) Pays mal adaptés.
==========
=========
6) Parmi ces trois États, quel est celui dont la population croît la plus vite ?
a) L’Inde.
b) Le Japon.
c) La Chine.
7) Lequel de ces États est une démocratie ?
a) La Chine.
b) L’Inde.
c) La Corée du Nord.
8) Les relations économiques entre la Chine et le Japon se caractérisent par :
a) des conflits.
b) de la concurrence.
c) de la complémentarité.
9) À quelle instance la Chine refuse-t-elle la candidature du Japon ?
a) L’ONU.
b) L’OMC.
c) Le Conseil de sécurité de l’ONU.
10) Quel État est chargé d’assurer la protection militaire du Japon ?
a) Le Royaume-Uni.
b) Les États-Unis.
c) La Chine.
==========

但是,为此我必须手动关闭 Selenium 浏览器中出现的弹出窗口,如果我不手动关闭它,我有一个 ElementClickInterceptedError 会杀死我的程序。

有没有办法在 Selenium 中使用 Ruby 关闭这个弹出窗口?


 element click intercepted: Element <label class="  c-radio-label u-themed  ">...</label> is not clickable at point (476, 499). Other element would receive the click: <div class="sd-cmp-39-hc" style="color: rgb(51, 51, 51);">...</div> (Selenium::WebDriver::Error::ElementClickInterceptedError)

【讨论】:

  • 不是红宝石,而是一个选项:sqa.stackexchange.com/questions/5310/…
  • Ruby 示例:stackoverflow.com/questions/36738888/… 我希望这会有所帮助,我对 Selenium 一无所知。
  • 另一篇关于 Selenium 和 Pop Ups 的帖子:stackoverflow.com/questions/17465136/…
  • 请不要添加答案,除非您打算将其作为问题的选定解决方案。答案不是为了延续问题,也不是为了总结或展示另一个答案如何帮助解决问题。 Stack Overflow 就像是一本关于编程问题及其解决方案的在线参考书,而不是留言板或论坛。另外,当您更改答案时,请不要使用“编辑”或“更新”标签。只需修改它以合并新信息,就好像它以前存在过一样。我们可以看到发生了什么变化以及何时需要。
【解决方案2】:

第 2 页有更多复选框。

生成的页面源代码显示 5 个答案和 15 个复选框,但我访问了该页面并看到总共 30 个复选框的 10 个问题。这就是法语错误消息并非所有复选框都被勾选的原因。

使用以下代码检查第 1 页:

agent = Mechanize.new
page = agent.get('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')
form = agent.page.form_with(:class => "c-form")

puts form.inspect 

如果循环遍历page.formsform.fields,页面上有两种不同的表单:

agent = Mechanize.new
page = agent.get('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.page.forms.each do |form|
  pp form
  form.fields.each do |field|
  pp field
  end
end

Getting Started With Mechanize”会有所帮助。

在提交表单之前,您需要单击底部的按钮,然后在第 2 页重复相同的操作。

随着表单使用 JavaScript 更改,似乎没有选项。

【讨论】:

  • 更新:我发现并使用 Selenium 充当浏览器,从而执行我要求它执行的操作。这是一种工作,我设法访问了页面的其余部分code
  • 很高兴知道,我也读过一些关于 Selenium 的文章。不过,下面的帖子基本上是一个新问题。
  • 请不要在更改答案时使用“编辑”或“更新”标签。只需修改它以合并新信息,就好像它以前存在过一样。我们可以看到发生了什么变化以及何时需要。
猜你喜欢
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多