Python循环读取CSV重复取首行问题:Instagram登录系统修复
解决Instagram批量登录重复读取同一账号的问题
问题根源
你的代码出现重复读取同一账号的原因有三个:
- 全局变量
df初始化后从未更新,函数内修改的是局部df,不影响全局变量,导致每次登录都取初始df的第0行 - 循环写法错误:
for line in len(df)是无效的,len(df)返回整数,无法直接迭代 - 每次循环没有重新读取最新的CSV文件,始终基于初始数据执行
修复方案
修改后的代码核心逻辑改为每次循环前读取最新CSV,处理首行后删除并保存,确保下一次循环拿到新的首行:
import pandas as pd import time from selenium import webdriver import undetected_chromedriver as uc from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys CSV_PATH = '/Users/giuseppeleonardi/Downloads/scraping2.csv' def instagram_login(username, password): driver.get('https://www.instagram.com/') driver.maximize_window() time.sleep(2) # 处理隐私弹窗 try: consent_btn = driver.find_element(By.XPATH, "/html/body/div[2]/div/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/button[2]") consent_btn.click() except: pass time.sleep(5) # 输入账号密码 username_input = driver.find_element(By.NAME, "username") username_input.send_keys(username) password_input = driver.find_element(By.NAME, "password") password_input.send_keys(password) time.sleep(2) # 点击登录 login_btn = driver.find_element(By.XPATH, "//div[contains(text(),'Accedi')]") login_btn.click() time.sleep(6) # 初始化浏览器 driver = uc.Chrome() try: while True: # 每次循环读取最新的CSV df = pd.read_csv(CSV_PATH) if df.empty: print("所有账号已处理完毕") break # 获取首行的账号密码 first_row = df.iloc[0] username = first_row['ID'] password = first_row['PASSWORD'] print(f"正在登录账号: {username}") instagram_login(username, password) # 删除首行并保存回CSV df = df.drop(0, axis=0) df.to_csv(CSV_PATH, index=False) # 清理cookie,准备下一次登录 driver.delete_all_cookies() time.sleep(5) finally: # 关闭浏览器 driver.quit()
关键修改点说明
- 把CSV路径抽成常量
CSV_PATH,避免重复写路径 - 重构
instagram_login函数,直接接收账号密码作为参数,不再依赖全局变量或剪贴板(剪贴板容易出问题,直接传参更可靠) - 改用
while True循环,每次读取最新CSV,判断是否为空来终止循环,避免初始len(df)的限制 - 每次循环都重新读取CSV,确保拿到删除首行后的最新数据
- 增加
try-finally块,确保浏览器最终会关闭,避免资源泄漏 - 移除了无用的
names、random导入,精简代码
内容的提问来源于stack exchange,提问作者Giulia Magno
相关产品推荐
相关产品推荐

