Wie kann ich Bilder mit Google Translate massenübersetzen? [geschlossen]
Posted: 17 Feb 2025, 05:09
Ich wollte eine kostenlose Übersetzung mit Google übersetzen.
Dies ist das Skript, das ich mir entwickelt habe. Ich empfehle nicht, Strangers -Skripte in Ihre Browserkonsole einzufügen, bevor ich sie lese und zu verstehen. hl = en & tab = tt & sl = auto & tl = en & op = übersetzen
und öffnen Sie die Konsole und über das Skript hinaus in.
Das Skript kann zu jedem Zeitpunkt brechen, höchstwahrscheinlich werden die XPaths geändert.
Dies ist das Skript, das ich mir entwickelt habe. Ich empfehle nicht, Strangers -Skripte in Ihre Browserkonsole einzufügen, bevor ich sie lese und zu verstehen. hl = en & tab = tt & sl = auto & tl = en & op = übersetzen
und öffnen Sie die Konsole und über das Skript hinaus in.
Code: Select all
(function() {
// Function to click element by XPath
function clickElementByXPath(xpath) {
const element = document.evaluate(
xpath,
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
if (element) {
element.click();
console.log("Element clicked successfully:", xpath);
return true;
} else {
console.error("Element not found with XPath:", xpath);
return false;
}
}
// Function to paste from clipboard
async function pasteFromClipboard() {
try {
await navigator.clipboard.read();
document.execCommand('paste');
console.log("Image pasted successfully");
} catch (err) {
console.error("Failed to paste from clipboard:", err);
}
}
// Function to wait for element to appear
function waitForElement(xpath, timeout = 30000) {
return new Promise((resolve, reject) => {
const startTime = Date.now();
const checkElement = () => {
const element = document.evaluate(
xpath,
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
if (element) {
resolve(element);
} else if (Date.now() - startTime > timeout) {
reject(new Error(`Timeout waiting for element: ${xpath}`));
} else {
setTimeout(checkElement, 100);
}
};
checkElement();
});
}
// Function to process a single image
async function processImage(file, index) {
console.log(`Processing file: ${file.name}`);
// Find the [url=viewtopic.php?t=13405]drag and drop[/url] element
const dragDropElement = document.evaluate(
// @@@ [url=viewtopic.php?t=13405]Drag and Drop[/url] xPath
'/html/body/c-wiz/div/div[2]/c-wiz/div[5]/c-wiz',
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
if (dragDropElement) {
// Create a FileList object
const dataTransfer = new DataTransfer();
dataTransfer.items.add(file);
const fileList = dataTransfer.files;
// Create and dispatch dragenter event
const dragEnterEvent = new DragEvent('dragenter', { bubbles: true });
Object.defineProperty(dragEnterEvent, 'dataTransfer', {value: dataTransfer});
dragDropElement.dispatchEvent(dragEnterEvent);
// Create and dispatch dragover event
const dragOverEvent = new DragEvent('dragover', { bubbles: true });
Object.defineProperty(dragOverEvent, 'dataTransfer', {value: dataTransfer});
dragDropElement.dispatchEvent(dragOverEvent);
// Create and dispatch drop event
const dropEvent = new DragEvent('drop', { bubbles: true });
Object.defineProperty(dropEvent, 'dataTransfer', {value: dataTransfer});
dragDropElement.dispatchEvent(dropEvent);
// Wait for translation to complete
console.log("Waiting for download button...");
// @@@ Download translated image Buttone xPath
await waitForElement("/html/body/c-wiz/div/div[2]/c-wiz/div[5]/c-wiz/div[2]/c-wiz/div/div[1]/div[2]/div[2]/button");
clickElementByXPath("/html/body/c-wiz/div/div[2]/c-wiz/div[5]/c-wiz/div[2]/c-wiz/div/div[1]/div[2]/div[2]/button");
// Wait for download to complete (approximation)
console.log("Waiting for download to complete...");
await new Promise(resolve => setTimeout(resolve, 5000));
// Click the clear button
// @@@ close button xPath
clickElementByXPath("/html/body/c-wiz/div/div[2]/c-wiz/div[5]/c-wiz/div[2]/c-wiz/div/div[1]/div[2]/span[3]/button");
// Wait before next image
await new Promise(resolve => setTimeout(resolve, 2000));
console.log(`Finished processing: ${file.name}`);
} else {
console.error("Drag and drop element not found");
}
}
// Function to handle file selection and processing
async function handleFiles(files) {
for (let i = 0; i < files.length; i++) {
try {
const file = files[i];
if (!file.type.startsWith('image/')) {
console.log(`Skipping non-image file: ${file.name}`);
continue;
}
await processImage(file, i);
} catch (error) {
console.error(`Error processing file ${files[i].name}:`, error);
}
}
console.log('All files processed.');
}
// Function to copy image to clipboard with unique identifier
async function copyImageToClipboard(file, index) {
const blob = await file.arrayBuffer().then(buffer => new Blob([buffer], {type: file.type}));
// Create a new filename with a unique identifier
const fileExtension = file.name.split('.').pop();
const newFileName = `image_${index + 1}_${Date.now()}.${fileExtension}`;
// Create a new File object with the unique name
const newFile = new File([blob], newFileName, {type: file.type});
const item = new ClipboardItem({ [file.type]: newFile });
await navigator.clipboard.write([item]);
console.log(`Image ${newFileName} copied to clipboard`);
}
// Function to trigger file selection
function triggerFileSelection() {
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.multiple = true;
fileInput.accept = 'image/*';
fileInput.style.display = 'none';
document.body.appendChild(fileInput);
fileInput.addEventListener('change', function(event) {
const files = event.target.files;
if (files.length > 0) {
handleFiles(files);
} else {
console.log('No files selected.');
}
document.body.removeChild(fileInput);
});
fileInput.click();
}
// Create a button to trigger the file selection
const selectButton = document.createElement('button');
selectButton.textContent = 'Select Images';
selectButton.style.position = 'fixed';
selectButton.style.top = '10px';
selectButton.style.left = '10px';
selectButton.style.zIndex = '1000';
document.body.appendChild(selectButton);
selectButton.addEventListener('click', triggerFileSelection);
console.log('Script injected. Click the "Select Images" button to start.');
})();