You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium操作X平台:如何遍历列表实现逐条发送推文?

解决X平台自动化推文重复发送同一条内容的问题

问题根源

你的代码在遍历account.txt的每一行时,每次都会遍历Text列表,但处理第一个元素test1后立即执行break,导致后续所有推文都只会使用test1,完全没有遍历Text列表的剩余元素。

修改方案

维护一个索引变量,按顺序循环取用Text列表中的内容,每次处理完一条推文后更新索引,实现依次使用test1、test2的需求。

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time 
from selenium.webdriver.common.by import By

username_xpath = '/html/body/div/div/div/div[1]/div/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div/div/div/div[4]/label/div/div[2]/div/input'
button_xpath = '/html/body/div/div/div/div[1]/div/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div/div/div/button[2]/div'
password_xpath = '//*[@id="layers"]/div/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div/div[3]/div/label/div/div[2]/div[1]/input'

driver = webdriver.Chrome()
driver.get("https://x.com/i/flow/login")

element = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, username_xpath)))
driver.find_element(By.XPATH,username_xpath).send_keys("username")   

element = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, button_xpath)))
driver.find_element(By.XPATH,button_xpath).click()

element = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, password_xpath)))
driver.find_element(By.XPATH,password_xpath).send_keys("password")

element = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.CSS_SELECTOR, '[data-testid="LoginForm_Login_Button"]')))
driver.find_element(By.CSS_SELECTOR, '[data-testid="LoginForm_Login_Button"]').click()
time.sleep(3)

Text = [
    "test1",
    "test2"
]

# 初始化Text列表的索引,用于依次取用内容
text_index = 0

with open(r'C:\Users\user\Desktop\pyhton\test\account.txt', 'r') as file:
    for at_in_txt in file:
        driver.get('https://x.com/compose/post')
        time.sleep(4)
        tweet = driver.find_element(By.XPATH,'''(//div[@class='public-DraftStyleDefault-block public-DraftStyleDefault-ltr'])[1]''')

        # 按顺序取用Text中的当前内容
        current_text = Text[text_index]
        for char in current_text:
            tweet.send_keys(char)
            time.sleep(0.015)
        
        # 更新索引,循环使用Text列表(如果账号数量超过Text长度,会重复循环)
        text_index = (text_index + 1) % len(Text)

        tweet.send_keys(' ')
        for item in at_in_txt:
            tweet.send_keys(item)
            time.sleep(0.015)

        # 补充:点击发送按钮完成推文发布
        send_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[data-testid="tweetButton"]')))
        send_button.click()
        
        time.sleep(10)

关键修改点

  • 添加text_index变量,追踪当前要使用的Text列表元素位置
  • 移除原代码中遍历Text列表并break的无效逻辑,改为通过索引直接获取目标文本
  • 用取模运算更新索引,实现Text列表内容的循环复用
  • 补充了点击发送按钮的代码(原代码仅输入内容未完成发布)

内容的提问来源于stack exchange,提问作者user23448952

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:46:02