您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Собирает вопросы и ответы из формы и копирует в буфер обмена
// ==UserScript== // @name Collect and Copy Q&A from Yandex Forms // @namespace https://gist.github.com/ve3xone/9f6246b48aa31ff89bb80f7eeeb99ed5 // @version 0.31 // @description Собирает вопросы и ответы из формы и копирует в буфер обмена // @author Vladislav Startsev (aka ve3xone) // @match https://forms.yandex.ru/u/* // @icon https://www.google.com/s2/favicons?sz=64&domain=yandex.ru // @grant clipboardWrite // @license GNU-GPLV3 // ==/UserScript== // TODO: Если вдруг понадобиться нужно сделать OCR через translate.yandex.ru на картинки вопроса а то было такое что не текст вопроса кидали в вопросе а картинку (function() { 'use strict'; // Создаем функцию для сбора вопросов и ответов function collectQA() { // Получаем все вопросы let questions = document.querySelectorAll('.QuestionMarkup'); // Создаем массив для хранения текста let outputText = []; // Проходим по каждому вопросу и извлекаем текст вопроса и ответов questions.forEach((question) => { // Получаем текст вопроса let questionTextElement = question.querySelector('.QuestionLabel-Text ol li, .QuestionLabel-Text p'); let questionText = questionTextElement ? questionTextElement.innerText.trim() : "Вопрос не найден."; // Получаем все ответы из радио-кнопок let answerElements = question.querySelectorAll('.g-radio-group .g-control-label__text .OptionContent div'); let answers = Array.from(answerElements).map(answer => answer.getAttribute('title').trim()); // Получаем все ответы из чекбоксов let checkboxElements = question.querySelectorAll('.CheckboxQuestion-Control .g-control-label__text .OptionContent div'); let checkboxAnswers = Array.from(checkboxElements).map(answer => answer.getAttribute('title').trim()); // Добавляем вопрос и ответы в массив outputText.push(`Вопрос: ${questionText}`); // Если есть ответы из чекбоксов, добавляем их if (checkboxAnswers.length > 0) { outputText.push("Тут несколько вариантов ответа:"); checkboxAnswers.forEach((answer, index) => { outputText.push(`${index + 1}. ${answer}`); }); } else{ // Добавляем ответы из радио-кнопок outputText.push("Ответы:"); answers.forEach((answer, index) => { outputText.push(`${index + 1}. ${answer}`); }); } outputText.push(''); // Пустая строка для разделения вопросов }); // Копируем текст в буфер обмена navigator.clipboard.writeText(outputText.join('\n')).then(() => { alert('Текст успешно скопирован в буфер обмена!'); }).catch(err => { console.error('Ошибка при копировании текста в буфер обмена:', err); }); } // Добавляем кнопку для запуска функции let copyButton = document.createElement('button'); copyButton.innerText = 'Собрать и скопировать вопросы и ответы'; copyButton.style.position = 'fixed'; copyButton.style.top = '75px'; copyButton.style.right = '10px'; copyButton.style.zIndex = 1000; // Убедитесь, что кнопка поверх других элементов copyButton.style.padding = '10px'; copyButton.style.backgroundColor = '#4CAF50'; // Зеленый фон copyButton.style.color = 'white'; // Белый текст copyButton.style.border = 'none'; // Без границ copyButton.style.borderRadius = '5px'; // Закругленные углы copyButton.style.cursor = 'pointer'; // Указатель при наведении document.body.appendChild(copyButton); // Обработчик события для кнопки copyButton.addEventListener('click', collectQA); })();