Executando verificação de segurança...
2

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:])

Carregando publicação patrocinada...