Cliquer sur un élément d'une page via l'extension Chrome

Rico Clark

J'essaie de créer une extension chrome qui cliquera sur un élément d'une page Web lorsque vous cliquez sur un bouton de l'extension, mais pour une raison quelconque, cela ne fait rien, peu importe ce que j'essaye.

J'ai ça jusqu'à présent

manifest.json

{  
  "manifest_version": 2,  

  "name": "Such Activity",  
  "description": "Wow",  
  "version": "1.0",    
  "permissions": [  
        "tabs", "<all_urls>"  
    ],  

  "browser_action": {  
    "default_icon": "icon.png",  
    "default_popup": "popup.html"  
  },  
     "content_scripts": [  
        {  
            "matches": [ "<all_urls>" ],  
           "js": ["content_script.js"]  
            }  
        ]  
}

popup.html

<!doctype html>  
<html>  
  <head>  
    <title>activity</title>  
    <style>  
    </style>  
    <script src="content_script.js"></script>  
  </head>  
  <body>  
  <button id="clickactivity">click</button>  
  </body>  
</html>  

content_script.js

function ClickPlanet()
    {
        var planets = document.getElementsByClassName("planet-name");
        var randomplanet = Math.floor(Math.random() * planets.length);
        var clickplanet = planets[randomplanet];
        clickplanet.click();
        setInterval(function () { ClickPlanet() }, 2000);
    }

document.addEventListener('DOMContentLoaded', function () {
    document.getElementById('clickactivity').addEventListener('click', ClickPlanet);
});

Tout ce que je semble obtenir est cette erreur

Uncaught TypeError: Cannot read property 'click' of undefined

Je tripote ça depuis des heures, mais je n'arrive pas à le faire fonctionner. Toute aide est appréciée!

Marco Bonelli

Problème

Il semble que vous ne comprenez pas bien le comportement du script de contenu.

Citant la documentation officielle:

Les scripts de contenu sont des fichiers JavaScript qui s'exécutent dans le contexte de pages Web. En utilisant le modèle d'objet de document (DOM) standard, ils peuvent lire les détails des pages Web consultées par le navigateur ou y apporter des modifications.

Donc, utiliser votre content_script.jsdans votre popup.htmln'a pas beaucoup de sens, et entraîne évidemment une erreur car vous n'avez aucun bouton class="planet-name"dans votre popup.htmlpage.

Solution

Pour faire ce que vous voulez, vous devez créer un script différent pour votre popup.html, et ajouter un écouteur à ce bouton, donc quand on clique dessus, vous pouvez injecter le content_script.jsscript dans la page pour cliquer sur l'élément "planète".

Vous devrez donc:

  1. Modifiez votre manifest.jsonsuppression du "content_scripts"champ
  2. Créez un popup.jsfichier à ajouter dans votre popup.htmlpage
  3. Ajoutez un écouteur pour le bouton cliquez à l'intérieur popup.jspour injecter le content_script.jsfichier en utilisantchrome.tabs.executeScript()
  4. Modifiez votre content_script.jspour le faire cliquer sur le bouton directement sur la page

  1. Tout d'abord, modifiez votre manifest.json, il devrait ressembler à ceci:

    {  
        "manifest_version": 2,  
    
        "name": "Such Activity",  
        "description": "Wow",  
        "version": "1.0",    
        "permissions": ["tabs", "<all_urls>"],  
    
        "browser_action": {  
            "default_icon": "icon.png",  
            "default_popup": "popup.html"  
        }
    }
    
  2. Ensuite, supprimez votre content_script.jsde popup.htmlet remplacez-le par le popup.jsscript:

    <!doctype html>  
    <html>  
        <head><title>activity</title></head>  
    <body>  
        <button id="clickactivity">click</button>  
        <script src="popup.js"></script> 
    </body>
    </html>  
    
  3. Créez le popup.jsscript et ajoutez l'écouteur au bouton qui injectera le script dans la page en cours:

    function injectTheScript() {
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            // query the active tab, which will be only one tab
            //and inject the script in it
            chrome.tabs.executeScript(tabs[0].id, {file: "content_script.js"});
        });
    }
    
    document.getElementById('clickactivity').addEventListener('click', injectTheScript);
    
  4. Maintenant, dans votre content_script.js, vous devrez cliquer directement sur le bouton, et vous n'aurez pas non plus besoin de l'utiliser DOMContentReady, car Chrome attend d'injecter le script par lui-même. Ainsi, votre nouveau content_script.jssera:

    function clickPlanet() {
        var planets = document.getElementsByClassName("planet-name"),
            randomplanet = Math.floor(Math.random() * planets.length),
            clickplanet = planets[randomplanet];
    
        clickplanet.click();
    }
    
    clickPlanet();
    

Exemple de travail

Téléchargez un exemple fonctionnel de l'extension ICI .

Documentation

Je vous suggère fortement de jeter un œil à la documentation des méthodes utilisées dans mon exemple pour bien comprendre leur comportement et leurs propriétés, voici quelques liens qui pourraient vous être utiles:

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment cliquer sur une position spécifique d'un élément Web en sélénium?

Comment cliquer sur un élément <Td>

Enregistrer un élément personnalisé à partir d'une extension Chrome

Cliquer sur un élément déclenche le clic sur un autre élément [JQuery]

Cliquer sur les boutons d'un site Web avec une extension Chrome

Comment cliquer sur un élément utilisant du sélénium dans une longue liste déroulante?

Comment obtenir l'identifiant de suivi Google Analytics d'une page via une extension Chrome?

comment cliquer sur un élément avec des détails d'élément similaires sur un bouton avec une étendue à l'aide du script typographique Protractor

Cliquer sur un élément HTML avec QuerySelector via VBA

Comment cliquer sur un élément via Selenium Python

Est-il possible de cliquer sur chaque élément d'une page avec un contenu dynamique?

Comment cliquer sur un élément dans une vue de liste à l'aide d'un adaptateur personnalisé

Comment cliquer sur un élément en fonction du texte d'un autre élément

Comment faire une boucle à travers un élément html uisng python selenium pour cliquer sur chaque élément d'une page?

Comment appeler un élément qui a été déclaré dans la page OPTION.html dans une extension Chrome?

Trouver le deuxième élément de texte de lien spécifique sur une page et cliquer dessus via python

Cliquer sur une visibilité: élément masqué

Comment cliquer sur un élément d'emballage ReactJS ?

Comment cliquer sur un élément chargé via Ajax via le pilote Web dans Chrome

S'il y a un élément spécifique sur la page, cliquer sur un autre élément via Javascript userscript ?

Cliquer sur un bouton sur une page via l'extension Chrome

À l'aide de Selenium en Python, comment cliquer sur un lien différent pour chaque élément d'une liste ?

J'essaie d'utiliser Selenium Python pour cliquer sur un élément dans le nouvel onglet Chrome, mais je reçois une erreur, aucun élément de ce type, même si l'élément est là

Faire la distinction entre cliquer sur l'élément affiché et cliquer sur un élément dans la liste déroulante d'une ComboBox

Existe-t-il un moyen de cliquer sur quelque chose sur une page google chrome à l'aide de la fonction d'inspection ou de python ?

Le code ne fonctionne pas. J'essaie de cliquer sur un élément d'une page avec son numéro d'identification mais je ne peux pas

cliquer sur un attribut sur une page via Userscript

Impossible de cliquer sur l'élément Web par xpath via le pilote Selenium Chrome

Aide Javascript : cliquer sur un élément affecte cet élément ET d'autres éléments

TOP liste

chaudétiquette

Archive