Bot para assistir vídeos no YouTube
Tags: bots, rpa, python, braziliandevs
Published: 2024-03-24 23:07:52

Neste post, usando ferramentas Python, desenvolvemos um <a href="https://en.wikipedia.org/wiki/Internet_bot">robô (<u>bot</u>) 🤖</a> que seja capaz de assistir vídeos no Youtube de forma automatizada.

Iniciamos com a instalação do Selenium e falamos um pouco sobre WebDriver. Essas ferramentas são bastante usadas em <a href="https://en.wikipedia.org/wiki/Software_testing">testes de software</a>. Em seguida, apresentamos o script Python que fizemos para automatizar a tarefa de ver um vídeo no Youtube, ou algo do tipo, por N vezes em M janelas abertas simultaneamente. Falamos "algo do tipo" porque de forma muito semelhante ao que será feito conseguimos criar novas tarefas de acordo com a preferência de cada um.

☕

---

## Instalação do Selenium

Em um computador com Python 3, devemos instalar o <a href="https://www.selenium.dev/">Selenium</a>. Para isso usamos o `pip install`:

```shell
pip install selenium
```

O Selenium é uma ferramentas para automatização de tarefas na web. Serve ainda para as mais diversas tarefas de automação no contexto da famosa área conhecida como <a href="https://en.wikipedia.org/wiki/Robotic_process_automation">RPA (_Robotic Process Automation_)</a>. Ele está disponível para download gratuito em <a href="https://www.selenium.dev/downloads/">algumas linguagens</a> como Java e Ruby. Aqui usaremos a versão para linguagem Python.

![homepage selenium](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jdw8zluco5k8vmiemkzi.png)

---

## Chrome Driver

Outra ferramenta bastante usada para automatizar testes na web é o <a href="https://developer.mozilla.org/en-US/docs/Web/WebDriver">WebDriver</a>. Com ele conseguimos executar inúmeras tarefas para diferentes navegadores web. Aqui usaremos o navegador Chrome.

**Pré-requisito:** Um pré-requisito para instalar o WebDriver é ter uma versão do <a href="https://developer.chrome.com/">Chrome</a> instalado ou algo equivalente a isso. Por ex., Firefox e o Webdriver do Firefox. Clique <a hfre="https://developer.mozilla.org/en-US/docs/Web/WebDriver">aqui</a> para saber mais.

Agora devemos criar um diretório para salvar o WebDriver dentro dele. Chamaremos o diretório criado de `bot-youtube`. Isso pode ser feito pelo terminal, com o código abaixo.

```shell
mkdir bot-youtube
```

**Download do driver:** Para baixar o Chrome driver (WebDriver) correspondente ao seu navegador Google Chrome veja https://chromedriver.chromium.org/downloads ou https://googlechromelabs.github.io/chrome-for-testing/ (para versões mais recentes, i.e., <u>versão > 115</u>). Aqui usamos, e testamos, para a versão do drive para <u>Linux 64 bits (123.0.6312.58</u>) e mesma versão do navegador Chrome. Clique <a href="https://www.google.com/intl/pt-BR/chrome/">aqui</a> para baixar o Chrome. Caso use Windows ou outro sistema operacional, basta baixar o driver e navegador Chrome adequados.


Estrutura dos arquivos após o download do WebDriver:
```shell
bot-youtube/
│
├── chromedriver_linux64/
│   └── chromedriver

```

**Nota:** Se usarmos o WebDriver na versão Windows, o nome padrão da pasta `chromedriver_linux64` será outro.

---

## Script Python

Para realizar as tarefas automatizadas, de forma que o bot veja um vídeo no Youtube, usaremos o seguinte script (`bot_youtube.py`) em Python:

```python
#bot_youtube.py

import random
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

PATH_DRIVER = './chromedriver_linux64/' # path para o driver
DEFAULT_LINK = r'https://www.youtube.com/watch?v=XlGLf7cWOJA' # link para o vídeo
DEFAULT_TIME = 56*60 # duração do vídeo em segundos (s)
DEFAULT_N = 2 # número de vezes que o vídeo será visto
DEFAULT_N_DRIVERS = 3 # número de janelas que serão abertas para ver o vídeo

# input - link do vídeo
url = input(f'\n1. Entre com o link do vídeo no YouTube \n[Sugestão: >>> {DEFAULT_LINK}, entrevista com Cornelius Lanczos]:\n\n>>> ')
# obs: o vídeo do Lanczos tem 55:51 min = ~(56 x 60)s = ~3600 s

# checa input
if not url:
    url = DEFAULT_LINK
print(f'>>> URL escolhida: {url}')

# input - tempo do vídeo
duration = input(f'\n\n2. Entre com a duração do vídeo em segundos\n[Por ex.: >>> {DEFAULT_TIME}, para o vídeo do pq ele tem cerca de 1h, ou seja, 3600 s]:\n\n>>> ')

# checa input
if not duration:
    duration = DEFAULT_TIME
else:
    duration = int(duration)
print(f'>>> Tempo de duração escolhido: {duration}')

# define o número de vezes que o bot verá o vídeo
n = input(f'\n\n3. Entre aqui com o número inteiro N correspondente ao número de vezes que o bot irá abrir a(s) janela(s) no navegador para assistir o vídeo\n[Sugestão: >>> {DEFAULT_N}]:\n\n>>> ')

# checa input
if not n:
    n = DEFAULT_N
else:
    n = int(n)
print(f'>>> N escolhido: {n}')

# define o número de janelas que abrirá
n_drivers = input(f'\n\n4. Entre com o número inteiro M que corresponderá ao total de janelas que serão abertas simultaneamente para assistir o vídeo\n[ Sugestão: >>> {DEFAULT_N_DRIVERS}]:\n\n>>> ')

# checa input
if not n_drivers:
    n_drivers = DEFAULT_N_DRIVERS
else:
    n_drivers = int(n_drivers)
print(f'>>> M escolhido: {n_drivers}')

# assistindo o vídeo N vezes em M janelas abertas
for k in range(n):    
    print(f'\n\n----- {k+1} of {n} times -----')

    time_to_refresh = int(duration+2*n_drivers)

    drivers = []
    print(f'Abrindo {n_drivers} web drivers . . .')

    for i in range(n_drivers):
        drivers.append(webdriver.Chrome(executable_path='chromedriver'))
        drivers[i].get(url)

        time.sleep(random.randint(1, 3))

        video = drivers[i].find_element(By.ID, 'movie_player')

        video.send_keys('k') # hits k        

        time.sleep(random.randint(1, 3))

        #drivers[i].minimize_window()
        print(f'  > Driver aberto [{i}]')

    print(f'  > Assistindo os vídeos [{time_to_refresh} seconds] . . .')
    time.sleep(time_to_refresh)

    print('')
    print(f'Fechando os {n_drivers} web drivers . . .')
    for i in range(n_drivers):
        drivers[i].close()
        print(f'  > Finalizado o browser [{i}]')
```

Arquivos do projeto após a criação do `bot_youtube.py`:
```shell
bot-youtube/
│
├── chromedriver_linux64/
│   └── chromedriver
│
└── bot_youtube.py
```


### Rodando o bot
Para rodar o script `bot_youtube.py` que acabamos de criar, basta digitar o seguinte comando no terminal:
```shell
python bot_youtube.py
```

Após rodar o script, é necessário inserirmos as informações referentes ao vídeo que desejamos que nosso bot veja. A seguir temos a sequência de etapas para usar o bot:

**1.** Insira o link para o vídeo no Youtube.

<br/>

**2.** Entre com a duração do vídeo em <u>segundos (s)</u>

<br/>

**3.** Escolha o número de vezes que o bot irá assistir o vídeo (por ex., 2x ou 3x para testes)

<br/>

**4.** Defina o número de janelas que deverão abrir para assistir o vídeo ao mesmo tempo

<br/>

**5.** Aguarde o bot assistir os vídeos ⏳

---
**Próximos passos:** Agora que sabemos fazer um bot ver um vídeo na web, será que, com "algumas linhas de código a mais", daria para fazer o bot executar ações como pausar, adiantar ou dar _likes_ nos vídeos?


![gif-bot-rodando](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0n1l0awtlquzca6umi4f.gif)


<br/>
**⚠️ Alerta:** Certas tarefas de automatização devem ser usadas com cautela!!! Uma boa discussão sobre o assunto pode ser encontrada <a href="https://dev.to/crawlnow/is-web-scraping-legal-all-you-need-to-know-4ale">neste post </a>.

---

### Referências
- https://www.selenium.dev/
- https://stackoverflow.com/questions/67456411/youtube-automation-with-python-and-selenium