您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically scroll and archive all posts from any user on X.com into a .txt file
- // ==UserScript==
- // @name Archive All X.com Posts
- // @namespace http://tampermonkey.net/
- // @version 1.1
- // @description Automatically scroll and archive all posts from any user on X.com into a .txt file
- // @author wez
- // @match https://x.com/*
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- // Create a button to trigger the archiving process
- const archiveButton = document.createElement('button');
- archiveButton.textContent = 'Archive All Posts';
- archiveButton.style.position = 'fixed';
- archiveButton.style.top = '60px'; // Move button lower so it doesn't interfere
- archiveButton.style.right = '10px';
- archiveButton.style.zIndex = '10000';
- archiveButton.style.padding = '10px';
- archiveButton.style.backgroundColor = '#1DA1F2';
- archiveButton.style.color = '#ffffff';
- archiveButton.style.border = 'none';
- archiveButton.style.borderRadius = '5px';
- archiveButton.style.cursor = 'pointer';
- document.body.appendChild(archiveButton);
- let tweets = [];
- let isScrolling = false;
- // Function to collect tweets from the page
- const collectTweets = () => {
- const tweetElements = document.querySelectorAll('article div[lang]');
- tweetElements.forEach((tweet) => {
- const tweetText = tweet.innerText;
- if (tweetText) {
- const tweetTime = tweet.closest('article').querySelector('time').getAttribute('datetime');
- const tweetEntry = `${new Date(tweetTime).toLocaleString()}: ${tweetText}`;
- if (!tweets.includes(tweetEntry)) { // Avoid duplicates
- tweets.push(tweetEntry);
- }
- }
- });
- };
- // Function to scroll the page and load more tweets
- const autoScroll = () => {
- window.scrollTo(0, document.body.scrollHeight); // Scroll to the bottom
- setTimeout(() => {
- collectTweets();
- if (!isScrolling) {
- downloadTweets(); // Download tweets when scrolling stops
- } else {
- autoScroll(); // Continue scrolling
- }
- }, 1500); // Adjust this delay if needed
- };
- // Function to download collected tweets as a .txt file
- const downloadTweets = () => {
- const blob = new Blob([tweets.join('\n\n')], { type: 'text/plain' });
- const link = document.createElement('a');
- link.href = URL.createObjectURL(blob);
- link.download = 'archived_tweets.txt';
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- isScrolling = false; // Reset the scrolling flag
- };
- // Event listener to start archiving
- archiveButton.addEventListener('click', () => {
- isScrolling = true;
- autoScroll();
- // Stop scrolling after 60 seconds (adjust as necessary)
- setTimeout(() => {
- isScrolling = false;
- }, 60000);
- });
- })();