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

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

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 ?

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

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

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

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

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

Comment cliquer sur un élément via Selenium Python

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

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 ?

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à

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

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 les boutons d'un site Web avec 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 déclenche le clic sur un autre élément [JQuery]

cliquer sur un attribut sur une page via Userscript

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

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

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

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

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

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

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

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

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

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

Comment cliquer sur un élément <Td>

TOP liste

  1. 1

    Comment utiliser HttpClient avec TOUT cert ssl, quelle que soit la « mauvaise » est

  2. 2

    Comment afficher du texte au milieu de div avec une couleur d'arrière-plan différente?

  3. 3

    Résultat de l'échantillonneur JMeter : comprendre le temps de chargement, le temps de connexion et la latence

  4. 4

    Pourquoi Object.hashCode () ne suit pas la convention du code Java

  5. 5

    Modbus Python Schneider PM5300

  6. 6

    Comment faire une recherche partielle et obtenir un score pertinent dans Elasticsearch

  7. 7

    Autocomplete avec java, Redis, Recherche élastique, Mongo

  8. 8

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  9. 9

    optimiser les opérations du serveur avec elasticsearch: traitement des filigranes de disque bas

  10. 10

    MasterService d'ElasticSearch prend trop de temps pour calculer l'état du cluster et lancer ProcessClusterEventTimeoutException

  11. 11

    Comment changer la couleur de la police dans R?

  12. 12

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  13. 13

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  14. 14

    Faire une requête HTTP avec Elixir et Phoenix

  15. 15

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  16. 16

    Comment analyser un hachage Ruby plat en un hachage imbriqué?

  17. 17

    Comment empêcher Spring Boot de créer automatiquement une instance du bean 'entityManagerFactory' au démarrage?

  18. 18

    Ajustement non linéaire avec R

  19. 19

    Quelque chose dans le cluster Elasticsearch 7.4 devient de plus en plus lent avec les délais de lecture de temps en temps

  20. 20

    comment afficher un bouton au-dessus d'un autre élément ?

  21. 21

    Comment créer une nouvelle application dans Dropbox avec des autorisations complètes

chaudétiquette

Archive