从Chrome扩展程序模拟页面上的点击元素?

我需要迭代并单击页面上带有.star_gray类的所有元素,并保持迭代并在重定向后单击。 运行JavaScript代码无法满足第二个要求,因此我计划编写Chrome扩展程序。

但我无法通过扩展模拟网页上的点击事件。 我的项目如下:

的manifest.json

 { "manifest_version": 2, "name": "Check'em All", "description": "", "version": "1.0", "browser_action": { "default_popup": "popup.html" }, "background": { "persistent": true, "scripts": ["jquery.js", "background.js"] }, "content_scripts": [{ "matches": ["file:///*"], "js" : ["popup.js"] }], "permissions": [ "tabs", "http://*/*", "https://*/*" ] } 

popup.html

     Check'em All!   

Check'em All!

popup.js

 document.addEventListener('DOMContentLoaded', function () { var btn = document.getElementById('check-btn'); btn.addEventListener('click', injectScript); }); function injectScript() { alert('Handler called!'); chrome.tabs.executeScript(null, { file: 'background.js' }); } 

background.js

 $(document).ready(function(){ $('.star_gray').click(); $('a.btn.page_next').click(); }); 

使用上面的代码,当我单击弹出窗口上的按钮( #check-btn )时,没有任何反应。

您无法在后台页面中访问DOM。 根据您的代码,您可能需要从官方教程中学到更多知识,因为您似乎对“弹出”,“背景”和“内容”感到困惑。

假设您要在内容页面中触发类“.star_gray”的所有元素的click事件,以下代码会在您单击browserAction后触发这些事件。

的manifest.json

 { "name": "Test", "version": "1.0", "permissions": [ "tabs" ], "description": "Test", "background": { "persistent": false, "scripts": [ "background.js" ] }, "content_scripts": [ { "matches": [ "*://*/*" ], "js": [ "jquery.js", "content.js" ], "run_at": "document_end", "all_frames": true } ], "browser_action": { "title": "Test" }, "manifest_version": 2 } 

background.js

 chrome.browserAction.onClicked.addListener(function() { chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { chrome.tabs.sendMessage(tabs[0].id, {command: "click"}, function(response) { console.log(response.result); }); }); }); 

content.js

 chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { $('.star_gray').click(); $('a.btn.page_next').click(); sendResponse({result: "success"}); }); 

通过@ haibara-ai改进以前的答案,不要使用tabs权限 。

请注意,在您的情况下,您甚至不需要查看ready()因为脚本仅在触发浏览器操作时运行,这可能是在DOMContentLoaded之后。

的manifest.json

 { "name": "Test", "version": "1.0", "permissions": [ "activeTab" ], "description": "Test", "background": { "scripts": [ "background.js" ] }, "browser_action": { "title": "Test" }, "manifest_version": 2 } 

background.js

 var files = [ 'jquery.js', 'content.js', ]; chrome.browserAction.onClicked.addListener(function() { for (var file of files) { chrome.tabs.executeScript({ file: file, allFrames: true, }); } }); 

content.js

 $('.star_gray').click(); $('a.btn.page_next').click(); 

但请注意,这只能解决“通过扩展程序在网页上模拟点击事件”的问题。 这并不意味着“保持迭代并在重定向后单击”将起作用。 你最好用另外一个问题来详细说明你的意思。