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
相关产品推荐
相关产品推荐

