commit ae76837e41780f1542ec30fc01154e5834402b60
Author: woni <320753691@qq.com>
Date: Tue Dec 17 18:49:48 2024 +0800
init
diff --git a/Xbot PY Helper.zip b/Xbot PY Helper.zip
new file mode 100644
index 0000000..66ba904
Binary files /dev/null and b/Xbot PY Helper.zip differ
diff --git a/images/yingdao-16x16.png b/images/yingdao-16x16.png
new file mode 100644
index 0000000..24e89d0
Binary files /dev/null and b/images/yingdao-16x16.png differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..126e983
--- /dev/null
+++ b/index.html
@@ -0,0 +1,63 @@
+
+
+
+ 影刀 PY 助手
+
+
+
+
+ Copy mode is off
+
+
+
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..2bfca0b
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,38 @@
+{
+ "name": "Xbot PY Helper",
+ "description": "自动生成 网页自动化代码",
+ "version": "0.1.1",
+ "manifest_version": 3,
+ "permissions": [
+ "activeTab",
+ "scripting",
+ "clipboardWrite"
+ ],
+ "background": {
+ "service_worker": "scripts/background.js"
+ },
+ "action": {
+ "default_popup": "index.html",
+ "default_icon": "images/yingdao-16x16.png"
+ },
+ "content_scripts": [
+ {
+ "matches": [
+ ""
+ ],
+ "js": [
+ "scripts/content.js"
+ ]
+ }
+ ],
+ "web_accessible_resources": [
+ {
+ "resources": [
+ "scripts/popup.js"
+ ],
+ "matches": [
+ ""
+ ]
+ }
+ ]
+}
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..062dad8
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,12 @@
+# 影刀YD助手
+## 项目介绍
+
+
+## 功能介绍
+鼠标悬浮到元素上, 自动生成影刀代码
+
+## 优化项目
+
+1. 生成xpath的规则
+2. 支持跨域
+3. 支持开始和关闭拷贝模式
diff --git a/scripts/background.js b/scripts/background.js
new file mode 100644
index 0000000..05d0674
--- /dev/null
+++ b/scripts/background.js
@@ -0,0 +1,32 @@
+let isCopyModeEnabled = false;
+
+chrome.action.onClicked.addListener(function (tab) {
+ chrome.scripting.executeScript({
+ target: { tabId: tab.id },
+ function: toggleCopyMode
+ });
+});
+
+chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
+ if (request.action === 'toggleCopyMode') {
+ isCopyModeEnabled = !isCopyModeEnabled;
+ chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
+ chrome.tabs.sendMessage(tabs[0].id, { action: 'toggleCopyMode' }, function (response) {
+ sendResponse({ copyModeEnabled: isCopyModeEnabled });
+ });
+ });
+ return true; // Keep the message channel open for sendResponse
+ } else if (request.action === 'getCopyModeStatus') {
+ sendResponse({ copyModeEnabled: isCopyModeEnabled });
+ }
+});
+
+function toggleCopyMode() {
+ chrome.runtime.sendMessage({ action: 'toggleCopyMode' }, function (response) {
+ if (response.copyModeEnabled) {
+ console.log('Copy mode enabled');
+ } else {
+ console.log('Copy mode disabled');
+ }
+ });
+}
diff --git a/scripts/content.js b/scripts/content.js
new file mode 100644
index 0000000..e46d4a9
--- /dev/null
+++ b/scripts/content.js
@@ -0,0 +1,102 @@
+(function () {
+ // 清除之前的高亮样式
+ let previousHighlight = null;
+ let copyButton = null;
+ let isCopyModeEnabled = false;
+
+ // 创建复制按钮
+ function createCopyButton() {
+ const button = document.createElement('button');
+ button.innerHTML = '📋'; // 使用图标展示拷贝
+ button.style.position = 'absolute';
+ button.style.zIndex = '1000';
+ button.style.display = 'none';
+ button.style.background = 'transparent';
+ button.style.border = 'none';
+ button.style.cursor = 'pointer';
+ button.style.fontSize = '16px';
+ button.addEventListener('click', function () {
+ if (previousHighlight) {
+ const xpath = getElementXPath(previousHighlight);
+ const action = previousHighlight.tagName.toLowerCase() === 'input' ? 'input("your_text")' : 'click()';
+ const command = `web.find_by_xpath("${xpath}").${action}`;
+ navigator.clipboard.writeText(command).then(() => {
+ console.log('Command copied to clipboard:', command);
+ });
+ }
+ });
+ document.body.appendChild(button);
+ return button;
+ }
+
+ // 获取元素的 XPath
+ function getElementXPath(element) {
+ let path = [];
+ while (element) {
+ let index = 1;
+ let sibling = element.previousElementSibling;
+ while (sibling) {
+ if (sibling.nodeName === element.nodeName) {
+ index++;
+ }
+ sibling = sibling.previousElementSibling;
+ }
+ path.unshift(`${element.nodeName.toLowerCase()}[${index}]`);
+ element = element.parentNode;
+ }
+ return path.length ? '/' + path.join('/') : null;
+ }
+
+ // 监听鼠标移动事件
+ document.addEventListener('mousemove', function (event) {
+ if (!isCopyModeEnabled) return;
+
+ // 移除上一次高亮
+ if (previousHighlight) {
+ previousHighlight.style.border = '';
+ previousHighlight.style.borderRadius = '';
+ previousHighlight.style.boxShadow = '';
+ copyButton.style.display = 'none';
+ }
+
+ // 获取鼠标位置
+ const mouseX = event.clientX;
+ const mouseY = event.clientY;
+
+ // 获取鼠标下的元素
+ const element = document.elementFromPoint(mouseX, mouseY);
+
+ // 如果有元素,添加高亮样式并输出对应的 XPath
+ if (element && element !== document.body) {
+ previousHighlight = element;
+ element.style.border = '2px solid red';
+ element.style.borderRadius = '5px';
+
+ // 设置复制按钮位置并显示
+ const rect = element.getBoundingClientRect();
+ copyButton.style.left = `${rect.right + window.scrollX - 20}px`;
+ copyButton.style.top = `${rect.top + window.scrollY}px`;
+ copyButton.style.display = 'block';
+
+ // 输出 XPath
+ const xpath = getElementXPath(element);
+ console.log('Element XPath:', xpath);
+ }
+ });
+
+ // 监听消息以启用或禁用拷贝模式
+ chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
+ if (request.action === 'toggleCopyMode') {
+ isCopyModeEnabled = !isCopyModeEnabled;
+ if (!isCopyModeEnabled && previousHighlight) {
+ previousHighlight.style.border = '';
+ previousHighlight.style.borderRadius = '';
+ previousHighlight.style.boxShadow = '';
+ copyButton.style.display = 'none';
+ }
+ sendResponse({ copyModeEnabled: isCopyModeEnabled });
+ }
+ });
+
+ copyButton = createCopyButton();
+})();
diff --git a/scripts/popup.js b/scripts/popup.js
new file mode 100644
index 0000000..7a57f68
--- /dev/null
+++ b/scripts/popup.js
@@ -0,0 +1,20 @@
+document.addEventListener('DOMContentLoaded', function () {
+ const toggleSwitch = document.getElementById('toggleCopyMode');
+ const statusText = document.getElementById('statusText');
+
+ toggleSwitch.addEventListener('change', function () {
+ chrome.runtime.sendMessage({ action: 'toggleCopyMode' }, function (response) {
+ if (response.copyModeEnabled) {
+ statusText.textContent = 'Copy mode enabled';
+ } else {
+ statusText.textContent = 'Copy mode disabled';
+ }
+ });
+ });
+
+ // Initialize switch state based on current mode
+ chrome.runtime.sendMessage({ action: 'getCopyModeStatus' }, function (response) {
+ toggleSwitch.checked = response.copyModeEnabled;
+ statusText.textContent = response.copyModeEnabled ? 'Copy mode enabled' : 'Copy mode disabled';
+ });
+});