Ich habe unruhig nach einer Möglichkeit gesucht, automatisch eine Umfrageformularschaltfläche auszuwählen, die ein bestimmtes Wort enthält. Ich verwende Tampermonkey in Google Chrome. In diesem Fall möchte ich automatisch Schaltflächen mit dem Wort "Männlich" auswählen.

Hier ist ein Beispiel für die Art der Schaltfläche, über die ich spreche (einschließlich CSS / HTML):

enter image description here

Für die Frage: "Was ist Ihr Geschlecht?" Möchte ich automatisch "Männlich" auswählen. Ich habe alle Fragen zum Stackoverflow durchgearbeitet, die möglicherweise hilfreich sind, aber keine Ergebnisse liefern. Ich habe eine beschriftungsbasierte Methode gewählt und "textContent" verwendet, um hoffentlich den Text in der Formularfrage erkennen zu können.

Hier ist der Code, mit dem ich gerade arbeite (von How Kann ich mit Greasemonkey automatisch ein Optionsfeld auswählen?):

// ==UserScript==
// @name         Button Text Form Filler
// @include      https://tasupport.co1.qualtrics.com/jfe/form/SV_0qez6NHJGoCAmMt
// @version      1.0
// @description  Demonstration script to change form values
// ==/UserScript==

var labels = document.getElementsByTagName('label'); 
for (var i = 0; i < labels.length; ++i) { 
    if (labels[i].textContent == "Male") { 
        labels[i].click(); 
    }
}

Leider funktioniert der Code nicht und die Schaltfläche für "Männlich" ist beim Laden der Seite nicht ausgewählt. Dies kann auf der 2. Seite der folgenden Website getestet werden: https: //tasupport.co1 .qualtrics.com / jfe / form / SV_0qez6NHJGoCAmMt (woher der obige Screenshot stammt).

Ich habe auch Folgendes mit jQuery versucht (Wie klicke ich automatisch? dieser Knopf mit Tampermonkey?):

// ==UserScript==
// @name         jQuery Button Test
// @version      0.1
// @require      https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
// @include      https://tasupport.co1.qualtrics.com/jfe/form/SV_0qez6NHJGoCAmMt
// ==/UserScript==

$(document).ready(function() {
  $("button:contains('Male')").click();
});

Wieder nichts.

Es gibt ein paar ähnliche Fragen, die über den Stackoverflow verteilt sind, aber keine der Lösungen scheint hier zu funktionieren, oder vielleicht ist der Code, mit dem ich arbeite, veraltet. Ich würde mich über jede Hilfe freuen. Danke im Voraus.

0
theCrabNebula 18 Jän. 2019 im 14:07

3 Antworten

Beste Antwort

Ich habe folgendes in der Entwicklungskonsole versucht und es funktioniert. Ich hoffe es hilft

Array.from(document.querySelectorAll('label > span')).find(e => e.textContent === 'Male').parentElement.click()

Das Etikett hat eine ID, die Sie verwenden können. Sie müssen nicht im textContent nach Male suchen, wenn Sie diese ID verwenden.

document.getElementById('QID2-1-label').click()

Bearbeiten

Für Tampermonkey benötigen Sie einige Einstellungen, um die xhr-Anforderungen zu bearbeiten. Sie benötigen jQuery, waitForKeyElements.js und das @match benötigt Ihre xhr-URLs.

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You

// @match        https://tasupport.co1.qualtrics.com/jfe/form/SV_0qez6NHJGoCAmMt
// @match        https://tasupport.co1.qualtrics.com/jfe2/form/SV_0qez6NHJGoCAmMt/next?rand=775440350&tid=1&t=1547858208474
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require     https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant       GM_addStyle
// ==/UserScript==

const fire = () => Array.from(document.querySelectorAll('label > span')).find(e => e.textContent === 'Male').parentElement.click();

// another option
// const fire = () => document.getElementById('QID2-1-label').click();

waitForKeyElements (
    "#QID2-1-label",
    fire
);
1
d-h-e 19 Jän. 2019 im 01:33

Es gibt kein Schaltflächenelement. Das Element, das das Benutzerklickereignis abhört, ist tatsächlich eine versteckte Eingabe:

<li class="Selection reg">
  <!-- this input -->
  <input choiceid="1" aria-labelledby="QID2-1-label" class="radio QR-QID2-1 QWatchTimer" type="radio" name="QR~QID2" id="QR~QID2~1" value="1" data-runtime-checked="runtime.Selected">

  <!-- not these elements -->
  <label for="QR~QID2~1" class="q-radio q-checked" aria-hidden="true" data-runtime-class-q-checked="runtime.Choices.1.Selected"></label>  <span class="LabelWrapper"> 
  <label for="QR~QID2~1" id="QID2-1-label" class="SingleAnswer  q-checked" data-runtime-class-q-checked="runtime.Choices.1.Selected"><span>Male</span></label></span> <div class="clear"></div>
</li>

Sie müssen also die click -Methode des input -Elements aufrufen, um es auszulösen. Zum Beispiel könnten Sie tun:

var labels = document.getElementsByTagName('label');

for (var i = 0; i < labels.length; ++i) { 
    if (labels[i].textContent == "Male") { 
        labels[i].parentElement.parentElement.firstElementChild.click()
    }
}
1
Saraband 18 Jän. 2019 im 11:29

Versuchen Sie, ob dies funktioniert

$( ".SingleAnswer span" ).each(function( index ) {
       if($( this ).text().includes("Male")) {
           $( this ).click()
       }
});
1
Merhat Pandzharov 18 Jän. 2019 im 11:22