O projeto é em Python usando docker compose e celery, a autenticação deve se dar usando o Selenium em modo headless, contendo esses argumentos abaixo.
Options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
O objetivo é fazer ele rodar o login/autenticação da página do Instagram usando os proxys do Brasil (deve ter um espaço para colocar os dados dos proxys, como usuário, senha, host e ip), e ter um campo onde eu diga de quanto em quanto tempo ele vai fazer a rotação desses proxys, exemplo a cada 1 dia (24h) ele usa um, depois outro, etc.
Porque isso? Porque se eu colocar esse código em um servidor de hospedagem por exemplo nos EUA, ele vai dar problema para autenticar um Instagram do Brasil, com isso ele deve usar proxys do Brasil para não ter problema na hora de autenticar, mesmo estando hospedado em um servidor nos EUA.
O proxy é em http/socks5
exemplo (aqui terá mais de um ip, consequentemente terá mais de um username, password e porta)
# informações do proxy
proxy_host = ""
proxy_port = ""
proxy_username = ""
proxy_password = ""
proxy_options = {
'proxy': {
'http': f'socks5://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}',
'https': f'socks5://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}',
'no_proxy': 'localhost,127.0.0.1' # Adjust as needed
}
}
Imagem do Selenium que deve ser usado no Docker Compose (
docker-compose.yml - que é a mesma que já é usada no restante do projeto)
selenium:
image: selenium/standalone-chrome:latest
ports:
- "4444:4444"
exemplo de task de autenticação (provavelmente será incluso uma função adicional que será chamada dentro dessa task para usar o proxy)
@shared_task(bind=true)
def login_autenticacao_task(self, username, password, user_id):
logger.info(f"Task ID is {
self.request.id}") # Log the task ID
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
try:
# options = proxy_options()
navegador =
webdriver.Remote(
command_executor='http://selenium:4444/wd/hub',
options=options
)
print(f"Tentando acessar Instagram com o usuário {username}.")
# Verificar IP e localização
navegador.get("http://ipinfo.io")
time.sleep(5)
ip_info = navegador.find_element(By.TAG_NAME, "body").text
print(f"IP e localização: {ip_info}")
caminho_arquivo =
os.path.join(settings.BASE_DIR, "
print_autentica_proxy1.png")
navegador.save_screenshot(caminho_arquivo)
logger.error(f"Captura de tela salva em {caminho_arquivo}")
navegador.get("https://www.instagram.com/")
time.sleep(10)
Prazo de Entrega: Não estabelecido