segue em python como pode ser feito.
import sys
import csv
import time
import pickle
import random # Importando o módulo random
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException, WebDriverException
COOKIES_FILE = "instagram_cookies.pkl"
INDEX_FILE = "index.txt" # Arquivo para armazenar o índice atual
def save_index(index):
"""
Salva o índice (linha atual) no arquivo index.txt.
"""
with open(INDEX_FILE, "w") as f:
f.write(str(index))
print(f"[INFO] Índice {index} salvo em {INDEX_FILE}.")
def load_index():
"""
Lê o índice salvo no arquivo index.txt.
Retorna 0 se o arquivo não existir ou não puder ser lido.
"""
if not os.path.exists(INDEX_FILE):
return 0
with open(INDEX_FILE, "r") as f:
try:
return int(f.read().strip())
except ValueError:
return 0
def is_logged_in(driver, username):
"""
Verifica se estamos logados procurando o link para o perfil do usuário (ex: /username/).
"""
time.sleep(random.uniform(2, 4)) # Pausa aleatória para o DOM carregar
try:
driver.find_element(By.XPATH, f'//a[@href="/{username}/"]')
return True
except NoSuchElementException:
return False
def save_cookies(driver, path):
"""
Salva as cookies atuais do navegador em um arquivo .pkl.
"""
with open(path, "wb") as file:
pickle.dump(driver.get_cookies(), file)
print(f"[INFO] Cookies salvos em {path}.")
def load_cookies(driver, path):
"""
Carrega cookies de arquivo e as adiciona ao driver.
Retorna True se as cookies foram carregadas, False caso contrário.
"""
if not os.path.exists(path):
print(f"[INFO] Arquivo de cookies '{path}' não existe. Ignorando.")
return False
print(f"[INFO] Carregando cookies de {path} (antes de visitar o Instagram)...")
with open(path, "rb") as file:
cookies = pickle.load(file)
for cookie in cookies:
# Ajuste do domínio para garantir que elas sejam aceitas
cookie['domain'] = '.instagram.com'
# Remove 'sameSite' se existir (alguns drivers não aceitam)
cookie.pop('sameSite', None)
cookie_name = cookie.get('name')
try:
driver.add_cookie(cookie)
driver.refresh()
print(f"[INFO] Cookie '{cookie_name}' adicionado.")
time.sleep(1)
except Exception as e:
print(f"[WARN] Falha ao adicionar cookie '{cookie_name}': {e}")
print(f"[INFO] Cookies carregadas de {path}.")
return True
def login_instagram(driver, username, password):
"""
Faz login no Instagram de forma 'tradicional' (usuário e senha).
"""
print("[INFO] Realizando login manual...")
try:
username_input = driver.find_element(By.NAME, "username")
password_input = driver.find_element(By.NAME, "password")
username_input.send_keys(username)
password_input.send_keys(password)
password_input.send_keys(Keys.RETURN)
time.sleep(random.uniform(4, 6)) # Pausa aleatória para aguardar o carregamento
print("[INFO] Login realizado com sucesso.")
save_cookies(driver, COOKIES_FILE)
except NoSuchElementException as e:
print(f"[ERRO] Elemento de login não encontrado: {e}")
return False
except WebDriverException as e:
print(f"[ERRO] Erro ao tentar enviar dados de login: {e}")
return False
return True
def cleanup(driver):
"""
Limpeza após falha, garantindo que o driver seja fechado.
"""
print("[INFO] Limpando e fechando o navegador...")
driver.quit()
def add_close_friends_from_csv(driver, csv_file, start_index):
"""
Lê a SEGUNDA coluna do arquivo CSV e, para cada usuário,
pesquisa o nome no input de busca e tenta marcar como Close Friend.
"""
# 1. Acessar a página de "Close Friends"
driver.get("https://www.instagram.com/accounts/close_friends/")
time.sleep(random.uniform(8, 12)) # Pausa aleatória
pathFile = os.path.join(os.getcwd(), csv_file)
with open(pathFile, "r") as f:
reader = csv.reader(f, delimiter=";")
index = 0
print("[INFO] Iniciando leitura do arquivo CSV...")
for row in reader:
if index < start_index:
index += 1
continue # Pula até a linha inicial
if len(row) < 2:
continue # linha sem ao menos 2 colunas
# use separator ; to get second column
user_to_add = row[1].strip()
if not user_to_add:
continue
search_input = driver.find_element(By.XPATH, '//input[@placeholder="Pesquisar"]')
search_input.clear() # Limpar qualquer texto existente
search_input.send_keys(user_to_add)
time.sleep(random.uniform(5, 8)) # Pausa aleatória
user_cards = driver.find_elements(
By.XPATH,
'//div[@data-bloks-name="bk.components.Flexbox" '
'and contains(@class,"wbloks_1") and @role="button"]'
)
user_card = user_cards[0] if user_cards else None
if (user_card == None):
print(f"[INFO] Não encontrei o usuário {user_to_add} na busca.")
continue
# 3. Verificar se o usuário está visível na lista de resultados
try:
try:
user_card.find_element(
By.XPATH, './/div[contains(@style, "circle-check__filled__24")]'
)
print(f"[INFO] {user_to_add} já é Close Friend, passando para o próximo.")
continue # Já está marcado, passe para o próximo
except NoSuchElementException:
# 4. Marcar o usuário como Close Friend
user_card.click()
print(f"[INFO] {user_to_add} adicionado aos Close Friends.")
time.sleep(random.uniform(2, 3)) # Pausa aleatória
except NoSuchElementException:
print(f"[INFO] Não encontrei o usuário {user_to_add} na busca.")
time.sleep(random.uniform(2, 4)) # Pausa aleatória
# Salvar o índice após cada iteração
save_index(index)
index += 1
def main(args):
"""
Uso:
python script.py SEU_USUARIO SUA_SENHA
"""
username = args[0]
password = args[1]
# Carregar o índice de onde o script deve começar
start_index = load_index()
print(f"[INFO] Iniciando de onde parou, linha {start_index + 1}.")
print("[INFO] Iniciando o WebDriver...")
driver = webdriver.Chrome()
# 1) Carregar cookies antes de abrir o Instagram
print("[INFO] Acessando página 'about:blank' para inserir cookies primeiro...")
driver.get("about:blank")
if not load_cookies(driver, COOKIES_FILE):
print("[INFO] Cookies não carregados, tentando login manual.")
# 2) Agora sim, acessar Instagram
print("[INFO] Indo para https://www.instagram.com/")
driver.get("https://www.instagram.com/")
time.sleep(random.uniform(1, 2)) # Pausa aleatória para login
# 3) Verifica se as cookies nos deixaram logados
if is_logged_in(driver, username):
print("[INFO] Já estamos logados via cookies (sem necessidade de login).")
else:
print("[INFO] Não foi possível usar cookies para login. Fazendo login manual.")
if not login_instagram(driver, username, password):
print("[ERRO] Falha no login. Verifique credenciais ou bloqueios.")
cleanup(driver)
return
# 4) Ler e adicionar Close Friends
add_close_friends_from_csv(driver, "lista.csv", start_index)
print("[INFO] Finalizando em 5s...")
time.sleep(random.uniform(4, 6)) # Pausa aleatória
driver.quit()
if __name__ == "__main__":
# Exemplo:
# python script.py SEU_USUARIO SUA_SENHA
main(sys.argv[1:])