Guest User

Untitled

a guest
Aug 6th, 2025
12
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.87 KB | None | 0 0
  1. // ElevenLabs Knowledge Base Bulk Delete Script - Forward Only Version
  2. // This version just keeps moving forward through the list
  3.  
  4. async function deleteAllKnowledgeBaseFiles() {
  5. console.log('Starting ElevenLabs Knowledge Base deletion (Forward Only)...');
  6.  
  7. const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));
  8. let deletedCount = 0;
  9. let skippedCount = 0;
  10. let lastSuccessTime = Date.now();
  11.  
  12. // Function to close any open dialogs
  13. async function closeDialog() {
  14. const cancelButton = Array.from(document.querySelectorAll('button')).find(btn =>
  15. btn.textContent?.trim() === 'Cancel' && btn.offsetParent !== null
  16. );
  17.  
  18. if (cancelButton) {
  19. cancelButton.click();
  20. await wait(1000);
  21. } else {
  22. document.body.click();
  23. await wait(500);
  24. }
  25. }
  26.  
  27. async function tryDeleteAt(index) {
  28. const menuButtons = document.querySelectorAll('button[aria-label="Document actions"]');
  29.  
  30. if (index >= menuButtons.length) {
  31. return 'end_of_list';
  32. }
  33.  
  34. const menuButton = menuButtons[index];
  35. const row = menuButton.closest('tr');
  36. let fileName = 'Unknown';
  37.  
  38. if (row) {
  39. const nameCell = row.querySelector('td:first-child');
  40. if (nameCell) {
  41. const link = nameCell.querySelector('a');
  42. fileName = link ? link.textContent.trim() : nameCell.textContent.trim();
  43. }
  44. }
  45.  
  46. console.log(`\n--- Trying position ${index + 1}/${menuButtons.length}: ${fileName} ---`);
  47.  
  48. try {
  49. // Step 1: Click menu
  50. console.log('Opening menu...');
  51. menuButton.scrollIntoView({ behavior: 'smooth', block: 'center' });
  52. await wait(500);
  53. menuButton.click();
  54. await wait(2000);
  55.  
  56. // Step 2: Click delete
  57. const deleteOption = document.querySelector('[data-value="Delete document"]');
  58. if (!deleteOption) {
  59. console.log('❌ No delete option, skipping...');
  60. await closeDialog();
  61. skippedCount++;
  62. return 'skip';
  63. }
  64.  
  65. deleteOption.click();
  66. await wait(2000);
  67.  
  68. // Step 3: Confirm
  69. const deleteButton = Array.from(document.querySelectorAll('button')).find(btn => {
  70. const text = btn.textContent?.trim();
  71. const isVisible = btn.offsetParent !== null;
  72. const isInDialog = btn.closest('[role="dialog"], [role="alertdialog"]');
  73. return isVisible && isInDialog && text === 'Delete';
  74. });
  75.  
  76. if (!deleteButton) {
  77. console.log('❌ No confirm button, skipping...');
  78. await closeDialog();
  79. skippedCount++;
  80. return 'skip';
  81. }
  82.  
  83. deleteButton.click();
  84. deletedCount++;
  85. lastSuccessTime = Date.now();
  86. console.log(`✅ Deleted! Total: ${deletedCount}`);
  87.  
  88. // Wait for page update
  89. await wait(7000);
  90. return 'success';
  91.  
  92. } catch (error) {
  93. console.log('❌ Error, skipping...');
  94. await closeDialog();
  95. skippedCount++;
  96. return 'skip';
  97. }
  98. }
  99.  
  100. // Main loop - just go through the list
  101. console.log('\n=== Starting forward-only deletion ===\n');
  102.  
  103. let position = 0;
  104. let noProgressCycles = 0;
  105.  
  106. while (true) {
  107. const menuButtons = document.querySelectorAll('button[aria-label="Document actions"]');
  108.  
  109. if (menuButtons.length === 0) {
  110. console.log('\n✅ No more files!');
  111. break;
  112. }
  113.  
  114. // If we've gone through the whole list without deleting anything
  115. if (position >= menuButtons.length) {
  116. noProgressCycles++;
  117.  
  118. if (noProgressCycles >= 2) {
  119. console.log('\n⚠️ Went through entire list twice with no deletions.');
  120. console.log('The remaining files may have issues. Try refreshing.');
  121. break;
  122. }
  123.  
  124. console.log('\n🔄 Reached end of list, starting from top...\n');
  125. position = 0;
  126. await wait(3000);
  127. continue;
  128. }
  129.  
  130. const result = await tryDeleteAt(position);
  131.  
  132. if (result === 'success') {
  133. // Reset to start after successful deletion
  134. position = 0;
  135. noProgressCycles = 0;
  136. } else {
  137. // Move to next position
  138. position++;
  139. }
  140.  
  141. // Check if we've been stuck too long
  142. const timeSinceSuccess = Date.now() - lastSuccessTime;
  143. if (timeSinceSuccess > 120000) { // 2 minutes
  144. console.log('\n⏱️ No successful deletions in 2 minutes, stopping...');
  145. break;
  146. }
  147.  
  148. await wait(1000);
  149. }
  150.  
  151. console.log('\n=== Final Results ===');
  152. console.log(`✅ Deleted: ${deletedCount} files`);
  153. console.log(`⏭️ Skipped: ${skippedCount} attempts`);
  154. }
  155.  
  156. // Status check
  157. function status() {
  158. const files = document.querySelectorAll('button[aria-label="Document actions"]').length;
  159. console.log(`Files remaining: ${files}`);
  160. }
  161.  
  162. // Instructions
  163. console.log('=== ElevenLabs KB Delete (Forward Only) ===');
  164. console.log('This version keeps moving forward through the list.');
  165. console.log('\nCommands:');
  166. console.log('- status() : Check remaining files');
  167. console.log('\nStarting in 3 seconds...\n');
  168.  
  169. setTimeout(() => {
  170. deleteAllKnowledgeBaseFiles();
  171. }, 3000);
Advertisement
Add Comment
Please, Sign In to add comment