
CanalQb - Ubuntu - Script Selenium Grid - Resolvendo Captcha
import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.options import Options
# Acesso Remotochrome_options_remoto = Options()chrome_options_remoto.add_argument("--disable-dev-shm-usage")driver_remoto = webdriver.Remote(command_executor="http://192.168.0.11:4444/wd/hub",options=chrome_options_remoto)
Lembrando que o IP 192.168.0.11 é meu IP do Windows, descubra qual o seu, e continuamos.
# Abrindo pagina no computador clientedriver_remoto.get("https://miningness.com/login")time.sleep(1)username_field = driver_remoto.find_element(By.NAME, "email").send_keys('variavel_login')password_field = driver_remoto.find_element(By.NAME, "password").send_keys('variavel_senha')captcha_resolvido = Falsewhile not captcha_resolvido:captcha_resolvido = input("\tResolva o captcha e digite 's' para continuar: ").lower() == 's'try:sign_in_button = driver_remoto.find_element(By.XPATH, "//button[@type='submit' and @class='btn btn--yellow']")sign_in_button.click()except:pass
Observe o print acima, o fundo em preto, é o terminal do meu servidor linux aberto em putty, e a frente é a tela do site, onde possui o captcha resolvido, então de acordo com o print, assim que o captcha for resolvido, voltamos para o putty, e digitamos s e pressionamos o enter.
sign_in_button = driver_remoto.find_element(By.XPATH, "//button[@type='submit' and @class='btn btn--yellow']")sign_in_button.click()
Após ele confirmar o processo de login, ele irá pegar todos os cookies, está parte pode até apresentar erro, dependendo do tempo que sua internet precisa para retornar informações, mas precisamos criar a lista de cookies para transferir para o webdriver local, para que nossos scripts continue rodando no computador server.
cookies_remoto = driver_remoto.get_cookies() # Obter os cookies remotosprint(cookies_remoto) #Use essa parte para validar se os cookies foram recebidos.time.sleep(1) # Esperando 1 segundo antes de continuar o Scriptdriver_remoto.quit() #Fechando o navegador remoto, visto que o captcha foi resolvido.
Agora vamos vamos alimentar o webdriver local no servidor Ubuntu, com os dados conseguidos no acesso remoto.
Primeiro iremos preparar o Webdriver local.
chrome_options = Options()chrome_options.add_argument("--headless")chrome_options.add_argument("--no-sandbox")chrome_options.add_argument("--disable-dev-shm-usage")driver_local = webdriver.Chrome(options=chrome_options)
Explicando os itens
- --headless: Essa opção é usada para executar o navegador em modo "headless", ou seja, sem uma interface gráfica. Ao ativar essa opção, o navegador será executado em segundo plano, sem abrir uma janela visível. Isso é útil quando você deseja executar testes automatizados ou raspagem de dados sem a necessidade de interagir com a interface gráfica do navegador.
- --no-sandbox: Essa opção é usada para desativar o "sandbox" do navegador. O sandbox é um mecanismo de segurança que isola o navegador do sistema operacional do computador, fornecendo uma camada adicional de proteção contra ataques maliciosos. No entanto, em alguns casos, essa opção pode ser necessária para contornar problemas de permissões ou restrições de ambiente.
- --disable-dev-shm-usage: Essa opção desativa o uso de uma área de memória compartilhada ("dev/shm") pelo navegador. Por padrão, o Chrome usa essa área de memória compartilhada para criar segmentos de memória temporários durante a execução. No entanto, em alguns ambientes, pode haver restrições ou problemas de permissões relacionados a essa área de memória compartilhada. Ao desativar o seu uso, você pode contornar esses problemas.
driver_local.get("https://miningness.com/")time.sleep(1)# Excluir todos os cookies locaisdriver_local.delete_all_cookies()driver_local.get("https://miningness.com/")# Excluir todos os cookies locaisdriver_local.delete_all_cookies()cookies_locais = {}for cookie in cookies_remoto:nome_cookie = cookie['name']if nome_cookie in cookies_locais:# Opção 1: Substituir o cookie existente# cookies_locais[nome_cookie] = cookie# Opção 2: Atualizar o valor do cookie existentecookies_locais[nome_cookie]['value'] = cookie['value']else:cookies_locais[nome_cookie] = cookiedriver_local.delete_all_cookies()# Adicionar os cookies locais ao WebDriver localfor cookie in cookies_locais.values():cookie_dict = {'name': cookie['name'],'value': cookie['value'],'path': cookie['path'],'domain': cookie['domain'],'secure': cookie['secure'],'httpOnly': cookie['httpOnly'],'expiry': cookie['expiry']}driver_local.add_cookie(cookie_dict)driver_local.get("https://miningness.com/user/profile")time.sleep(1)

Nenhum comentário
Comente só assim vamos crescer juntos!
Observação: somente um membro deste blog pode postar um comentário.