Web scraping com Selenium: o básico
Web scraping é o processo de extrair dados de várias páginas da internet. Se você quer saber como começar a extrair dados com perfis Multilogin, siga este guia e você aprenderá a criar um script simples!
Este artigo tem como objetivo orientá-lo na criação do seu script passo a passo. Se desejar usar o script completo como referência, fique à vontade para rolar até o final.
Passo 1: prepare seu IDE ou um software similar
Você precisará de qualquer ferramenta para escrever seu script. A escolha é sua, mas recomendamos um IDE. Siga os primeiros 4 passos do seguinte artigo: Primeiros passos na automação por scripts.
Passo 2: crie o script de conexão com a API e defina as funções
Nesta etapa, você precisará fazer o script funcionar com API. O script incluirá:
- Endpoints da API
- Variáveis para credenciais
- Funções definidas para iniciar sessão, abrir e fechar perfil.
- Módulos importados, incluindo
requests,hashlibetime. Alguns módulos relacionados ao Selenium também serão incluídos. - Solicitação de login
Utilize o seguinte modelo:
import requests
import hashlib
import time
from selenium import webdriver
from selenium.webdriver.chromium.options import ChromiumOptions
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
MLX_BASE = "https://api.multilogin.com"
MLX_LAUNCHER = "https://launcher.mlx.yt:45001/api/v1"
MLX_LAUNCHER_V2 = (
"https://launcher.mlx.yt:45001/api/v2" # recommended for launching profiles
)
LOCALHOST = "http://127.0.0.1"
HEADERS = {"Accept": "application/json", "Content-Type": "application/json"}
# TODO: Insert your account information in both variables below
USERNAME = ""
PASSWORD = ""
# TODO: Insert the Folder ID and the Profile ID below
FOLDER_ID = ""
PROFILE_ID = ""
def signin() -> str:
payload = {
"email": USERNAME,
"password": hashlib.md5(PASSWORD.encode()).hexdigest(),
}
r = requests.post(f"{MLX_BASE}/user/signin", json=payload)
if r.status_code != 200:
print(f"\nError during login: {r.text}\n")
else:
response = r.json()["data"]
token = response["token"]
return token
def start_profile() -> webdriver:
r = requests.get(
f"{MLX_LAUNCHER_V2}/profile/f/{FOLDER_ID}/p/{PROFILE_ID}/start?automation_type=selenium",
headers=HEADERS,
)
response = r.json()
if r.status_code != 200:
print(f"\nError while starting profile: {r.text}\n")
else:
print(f"\nProfile {PROFILE_ID} started.\n")
selenium_port = response["data"]["port"]
driver = webdriver.Remote(
command_executor=f"{LOCALHOST}:{selenium_port}", options=ChromiumOptions()
)
# For Stealthfox profiles use: options=Options()
# For Mimic profiles use: options=ChromiumOptions()
return driver
def stop_profile() -> None:
r = requests.get(f"{MLX_LAUNCHER}/profile/stop/p/{PROFILE_ID}", headers=HEADERS)
if r.status_code != 200:
print(f"\nError while stopping profile: {r.text}\n")
else:
print(f"\nProfile {PROFILE_ID} stopped.\n")
token = signin()
HEADERS.update({"Authorization": f"Bearer {token}"})O modelo é semelhante ao exemplo de automação Selenium, exceto que possui o seguinte módulo importado no início (que precisaremos para a extração de dados):
from selenium.webdriver.common.by import By
Passo 3: escolha a página da web da qual deseja extrair os dados.
Você pode usar qualquer site que contenha texto, mas para este guia, recomendamos experimentar esta página – ela é ótima para praticar tarefas de automação: Large & Deep DOM.
Passo 4: procure as informações do alvo
No nosso caso, serão os dados da tabela abaixo:

Vamos obter todos os valores da tabela. Veja o que você pode fazer:
- Abra as Ferramentas de Desenvolvedor no seu navegador. Veja como fazer isso para navegadores baseados no Chromium e no Firefox:
- Windows e Linux: pressione
Ctrl + Shift + I - macOS: pressione
Cmd + Option + I
- Windows e Linux: pressione
- Certifique-se de estar na aba “Elementos”
- Use a tecla de atalho de pesquisa para encontrar o valor desejado
- Windows e Linux:
CTRL + F - macOS:
Cmd + F
- Windows e Linux:
- Digite o valor do texto que deseja visualizar. No nosso caso, é “Table”
- Procure o valor que você precisará usar para a extração de dados. No nosso caso, será o seguinte:
<table id="large-table"> - Passe o cursor sobre o elemento com as tags na aba “Elementos”
- Clique com o botão direito do mouse e, em seguida, clique com o botão esquerdo em “Copiar” – “Copiar seletor”
- Anote o valor em algum lugar – você precisará dele mais tarde

Passo 5: volte ao IDE e adicione novas linhas de código
- Volte para a ID de usuário de sua escolha (por exemplo, VS Code)
- Clique no campo de código e adicione uma variável para abrir e executar ações no perfil:
driver = start_profile() - Adicione
driver.get(“<site alvo>”). No nosso caso, será o seguinte comando:driver.get("https://the-internet.herokuapp.com/large") - Agora precisamos de um pequeno atraso para o script, para que ele tente executar os outros comandos 5 segundos após a abertura da página web:
time.sleep(5)
Passo 6: crie o script para encontrar o elemento
Use este comando para encontrar o elemento: driver.find_element(By.<atributo na pagina>, "<element>"). Ele informa ao script exatamente o que procurar na página. Como copiamos o seletor CSS na etapa 4, seu comando real ficará assim:
driver.find_element(By.ID, "large-table")Precisaremos obter seu valor mais tarde, então precisamos criar uma variável para o comando, por exemplo, fetch:
fetch = driver.find_element(By.ID, "large-table")Passo 7: imprima o resultado final e pare o perfil
- Use a função
print()para imprimir o resultado final. Como precisamos extrair o valor do texto, precisamos obter o texto da nossa variável. O resultado será o seguinte:print(fetch.text) - Adicione a função para interromper o perfil no final:
stop_profile() - Salve o script
.py, você precisará executá-lo após algumas etapas adicionais
Passo 8: prepare o script antes de executá-lo
- Instale as seguintes bibliotecas Python (consulte a documentação do seu IDE para obter mais detalhes):
requestsselenium
- Insira seus valores nas variáveis abaixo no script:
-
USERNAME: o e-mail da sua conta Multilogin X -
PASSWORD: Sua senha da conta Multilogin X (a criptografia MD5 não é necessária) -
FOLDER_ ID,PROFILE_ ID: encontre esses valores usando nossos guias no DevTools ou no Postman
-
Passo 9: execute o script
- Abra o aplicativo para desktop (ou conecte o agente se estiver usando a interface web)
- Por padrão, o script abaixo funciona para Mimic. Para usá-lo com Stealthfox, substitua
options=ChromiumOptions()poroptions=Options()na seguinte linha:driver = webdriver.Remote(command_executor=f'{LOCALHOST}:{selenium_port}', options=ChromiumOptions()) - Execute o arquivo
.pycom seu código de automação
Para executar o script no VS Code, clique em “Executar” → “Executar sem depuração” (ou “Iniciar depuração”).
Se você fez tudo corretamente, poderá ver o resultado no terminal. 
Observações
Parabéns pelo seu primeiro script de scraping! Você não está limitado apenas a essas opções. Python e Selenium são ferramentas bastante flexíveis e com muito mais potencial. Aqui vão algumas dicas:
- Se você precisar buscar vários valores por valores semelhantes (por exemplo, ID), você pode usar a seguinte função:
driver.find_elements(By.<atributo na pagina>, "<element>") - Você pode adicionar diversos valores à função
print(). Você pode encontrar mais informações sobre isso na internet. Por exemplo, você pode adicionar o texto antes defetch.text. Isso tornará o resultado da impressão mais legível e também pode ser útil para depurar o script. Aqui está um exemplo que você pode testar no script:print("Your values: ", fetch.text) - Existem outras maneiras de implementar Selenium. Consulte a central de ajuda para obter mais detalhes: Selenium Documentation
Script completo
import requests
import hashlib
import time
from selenium import webdriver
from selenium.webdriver.chromium.options import ChromiumOptions
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
MLX_BASE = "https://api.multilogin.com"
MLX_LAUNCHER = "https://launcher.mlx.yt:45001/api/v1"
MLX_LAUNCHER_V2 = (
"https://launcher.mlx.yt:45001/api/v2" # recommended for launching profiles
)
LOCALHOST = "http://127.0.0.1"
HEADERS = {"Accept": "application/json", "Content-Type": "application/json"}
# TODO: Insert your account information in both variables below
USERNAME = ""
PASSWORD = ""
# TODO: Insert the Folder ID and the Profile ID below
FOLDER_ID = ""
PROFILE_ID = ""
def signin() -> str:
payload = {
"email": USERNAME,
"password": hashlib.md5(PASSWORD.encode()).hexdigest(),
}
r = requests.post(f"{MLX_BASE}/user/signin", json=payload)
if r.status_code != 200:
print(f"\nError during login: {r.text}\n")
else:
response = r.json()["data"]
token = response["token"]
return token
def start_profile() -> webdriver:
r = requests.get(
f"{MLX_LAUNCHER_V2}/profile/f/{FOLDER_ID}/p/{PROFILE_ID}/start?automation_type=selenium",
headers=HEADERS,
)
response = r.json()
if r.status_code != 200:
print(f"\nError while starting profile: {r.text}\n")
else:
print(f"\nProfile {PROFILE_ID} started.\n")
selenium_port = response["data"]["port"]
driver = webdriver.Remote(
command_executor=f"{LOCALHOST}:{selenium_port}", options=ChromiumOptions()
)
# For Stealthfox profiles use: options=Options()
# For Mimic profiles use: options=ChromiumOptions()
return driver
def stop_profile() -> None:
r = requests.get(f"{MLX_LAUNCHER}/profile/stop/p/{PROFILE_ID}", headers=HEADERS)
if r.status_code != 200:
print(f"\nError while stopping profile: {r.text}\n")
else:
print(f"\nProfile {PROFILE_ID} stopped.\n")
token = signin()
HEADERS.update({"Authorization": f"Bearer {token}"})
driver = start_profile()
driver.get("https://the-internet.herokuapp.com/large")
time.sleep(5)
fetch = driver.find_element(By.ID, "large-table")
print(fetch.text)
stop_profile()Este artigo inclui links de terceiros que não endossamos oficialmente.