Skip to content

Instantly share code, notes, and snippets.

@fabiolimace
Last active September 28, 2024 19:29
Show Gist options
  • Save fabiolimace/a638d7dd395f5371e9d3331f080b3a0c to your computer and use it in GitHub Desktop.
Save fabiolimace/a638d7dd395f5371e9d3331f080b3a0c to your computer and use it in GitHub Desktop.
Isto é um robô que baixa todos os ebooks comprados na Amazon, usando a extensão do Firefox 'UI.Vision RPA' v9.2.9. Pode baixar 4000 livros da coleção pessoal em cerca de 10h. Informe a a quantidade de páginas de seu Conteúdo Digital na variável 'pmax'. Última atualização em 25/09/2024.
{
"Name": "baixar_ebooks_comprados_amazon",
"CreationDate": "2024-9-26",
"Commands": [
{
"Command": "comment",
"Target": "Isto é um robô que baixa todos os ebooks comprados na Amazon, usando a extensão do Firefox 'UI.Vision RPA' v9.2.9. Pode baixar 4000 livros da coleção pessoal em cerca de 10h. Informe a a quantidade de páginas de seu Conteúdo Digital na variável 'pmax'. Última atualização em 25/09/2024.",
"Value": "",
"Description": ""
},
{
"Command": "store",
"Target": "fast",
"Value": "!replayspeed",
"Description": "Velocicades: fast=0s, medium=0.3s, slow=2s"
},
{
"Command": "store",
"Target": "15",
"Value": "!TIMEOUT_WAIT",
"Description": ""
},
{
"Command": "store",
"Target": "1",
"Value": "p",
"Description": "Conta paginas"
},
{
"Command": "store",
"Target": "178",
"Value": "pmax",
"Description": "Quantidade máxima de paginas"
},
{
"Command": "store",
"Target": "1",
"Value": "c",
"Description": "Conta processados"
},
{
"Command": "store",
"Target": "0",
"Value": "b",
"Description": "Conta baixados"
},
{
"Command": "store",
"Target": "0",
"Value": "s",
"Description": "Conta salteados"
},
{
"Command": "executeScript_Sandbox",
"Target": "return (new Date()).getTime();",
"Value": "time",
"Description": ""
},
{
"Command": "store",
"Target": "ID,TITLE,AUTHOR,DATE,COVER",
"Value": "!csvLine",
"Description": "Salva a linha de cabeçalho no CSV"
},
{
"Command": "csvSave",
"Target": "salteados.${time}.csv",
"Value": "",
"Description": "Salva a linha de cabeçalho no CSV de livros salteados"
},
{
"Command": "store",
"Target": "ID,TITLE,AUTHOR,DATE,COVER",
"Value": "!csvLine",
"Description": "Salva a linha de cabeçalho no CSV"
},
{
"Command": "csvSave",
"Target": "baixados.${time}.csv",
"Value": "",
"Description": "Salva a linha de cabeçalho no CSV de livros baixados"
},
{
"Command": "while_v2",
"Target": "Number(${p}) <= Number(${pmax})",
"Value": "",
"Description": ""
},
{
"Command": "open",
"Target": "https://www.amazon.com.br/hz/mycd/digital-console/contentlist/booksAll/dateDsc/?pageNumber=${p}",
"Value": "",
"Description": ""
},
{
"Command": "waitForPageToLoad",
"Target": "",
"Value": "",
"Description": ""
},
{
"Command": "store",
"Target": "1",
"Value": "i",
"Description": "Itera pelos itens da tabela"
},
{
"Command": "store",
"Target": "25",
"Value": "imax",
"Description": "Quantidade máxima de itens por página"
},
{
"Command": "while_v2",
"Target": "Number(${i}) <= Number(${imax})",
"Value": "",
"Description": ""
},
{
"Command": "echo",
"Target": "Pagina: ${p}, Item da página: ${i}, Contador: ${c}",
"Value": "",
"Description": ""
},
{
"Command": "storeAttribute",
"Target": "xpath=//tr[${i}]/td/div/div[3]/div/div[1]@id",
"Value": "!csvLine",
"Description": "Salvar o ID do livro"
},
{
"Command": "storeText",
"Target": "xpath=//tr[${i}]/td/div/div[3]/div/div[1]",
"Value": "!csvLine",
"Description": "Salvar o titulo do livro"
},
{
"Command": "storeText",
"Target": "xpath=//tr[${i}]/td/div/div[3]/div/div[2]",
"Value": "!csvLine",
"Description": "Salvar o autor do livro"
},
{
"Command": "storeText",
"Target": "xpath=//tr[${i}]/td/div/div[3]/div/span/div[1]",
"Value": "!csvLine",
"Description": "Salvar o data de aquisição do livro"
},
{
"Command": "storeAttribute",
"Target": "xpath=//tr[${i}]/td/div/div[2]/img@src",
"Value": "!csvLine",
"Description": "Salvar a URL da capa do livro"
},
{
"Command": "click",
"Target": "xpath=//*/tr[${i}]/td/div/div[1]/label/input",
"Value": "",
"Description": "Clicar no checkbox"
},
{
"Command": "click",
"Target": "xpath=//*/tr[${i}]/td/div/div[4]/div/div[3]/div",
"Value": "",
"Description": "Clicar em mais ações"
},
{
"Command": "click",
"Target": "xpath=//*/tr[${i}]/td/div/div[4]/div/div[3]/div/div[3]/div[2]/div/div",
"Value": "",
"Description": "Clicar em Baixar e transferir por USB"
},
{
"Command": "storeText",
"Target": "xpath=//tr[${i}]/td/div/div[4]/div/div[3]/div/div[3]/div[2]/div[2]/div/div/div[2]/div",
"Value": "dialog",
"Description": ""
},
{
"Command": "if_v2",
"Target": "${dialog}.indexOf(\"Você não tem nenhum dispositivo compatível registrado para este conteúdo.\") > -1",
"Value": "",
"Description": ""
},
{
"Command": "click",
"Target": "xpath=//tr[${i}]/td/div/div[4]/div/div[3]/div/div[3]/div[2]/div[2]/div/div/div[3]/div/span",
"Value": "",
"Description": "Clicar no botão cancelar do diálogo"
},
{
"Command": "waitForElementNotVisible",
"Target": "xpath=//tr[${i}]/td/div/div[4]/div/div[3]/div/div[3]/div[2]/div[2]/div/div/div[3]/div/span",
"Value": "",
"Description": ""
},
{
"Command": "executeScript_Sandbox",
"Target": "return Number(${s}) + 1;",
"Value": "s",
"Description": ""
},
{
"Command": "csvSave",
"Target": "salteados.${time}.csv",
"Value": "",
"Description": "Salvar a linha no CSV de livros salteados"
},
{
"Command": "else",
"Target": "",
"Value": "",
"Description": ""
},
{
"Command": "click",
"Target": "xpath=//tr[${i}]/td/div/div[4]/div/div[3]/div/div[3]/div[2]/div[2]/div/div/div[2]/div/div[2]/ul/li/div/label/input",
"Value": "",
"Description": "Clicar no radio button"
},
{
"Command": "click",
"Target": "xpath=//tr[${i}]/td/div/div[4]/div/div[3]/div/div[3]/div[2]/div[2]/div/div/div[3]/div[2]/span",
"Value": "",
"Description": "Clicar em Baixar"
},
{
"Command": "waitForElementVisible",
"Target": "id=notification-close",
"Value": "",
"Description": ""
},
{
"Command": "click",
"Target": "id=notification-close",
"Value": "",
"Description": "Fechar a notificação"
},
{
"Command": "waitForElementNotVisible",
"Target": "id=notification-close",
"Value": "",
"Description": ""
},
{
"Command": "executeScript_Sandbox",
"Target": "return Number(${b}) + 1;",
"Value": "b",
"Description": ""
},
{
"Command": "csvSave",
"Target": "baixados.${time}.csv",
"Value": "",
"Description": "Salvar a linha no CSV de livros baixados"
},
{
"Command": "end",
"Target": "",
"Value": "",
"Description": ""
},
{
"Command": "executeScript_Sandbox",
"Target": "return Number(${i}) + 1;",
"Value": "i",
"Description": ""
},
{
"Command": "executeScript_Sandbox",
"Target": "return Number(${c}) + 1;",
"Value": "c",
"Description": ""
},
{
"Command": "end",
"Target": "",
"Value": "",
"Description": ""
},
{
"Command": "executeScript_Sandbox",
"Target": "return Number(${p}) + 1;",
"Value": "p",
"Description": ""
},
{
"Command": "end",
"Target": "",
"Value": "",
"Description": ""
},
{
"Command": "localStorageExport",
"Target": "salteados.${time}.csv",
"Value": "",
"Description": "Exportar arquivo salteados.csv"
},
{
"Command": "localStorageExport",
"Target": "baixados.${time}.csv",
"Value": "",
"Description": "Exportar arquivo baixados.csv"
},
{
"Command": "localStorageExport",
"Target": "log",
"Value": "",
"Description": "Exportar arquivo de log com o nome padrão 'uivision_log.txt'"
}
]
}
#!/bin/bash
# Este script corrige os CSVs gerados pelo robô `baixar_ebooks_comprados_amazon.json`.
#
# Correções feitas:
#
# Remove as aspas duplas da linha de cabeçalho;
# Remove "content-title-" do campo ID;
# Acrescenta um 0 antes do dia do mês menor que 10 no campo DATE;
# Remove "Adquirido em " do campo DATE;
# Substitui o nome do mês pelo seu valor numérico no campo DATE;
# Remove ".SX150" (tamanho 150 pixels?) do campo COVER.
#
[ ! -f "$1" ] && exit 1;
cat "$1" \
| sed -E 's/^"ID,TITLE,AUTHOR,DATE,COVER"$/ID,TITLE,AUTHOR,DATE,COVER/' \
| sed -E 's/^content-title-//' \
| sed -E 's/,Adquirido em ([1-9]) de /,Adquirido em 0\1 de /' \
| sed -E 's/,Adquirido em /,/' \
| sed -E 's/ de janeiro de /-01-/' \
| sed -E 's/ de fevereiro de /-02-/' \
| sed -E 's/ de março de /-03-/' \
| sed -E 's/ de abril de /-04-/' \
| sed -E 's/ de maio de /-05-/' \
| sed -E 's/ de junho de /-06-/' \
| sed -E 's/ de julho de /-07-/' \
| sed -E 's/ de agosto de /-08-/' \
| sed -E 's/ de setembro de /-09-/' \
| sed -E 's/ de outubro de /-10-/' \
| sed -E 's/ de novembro de /-11-/' \
| sed -E 's/ de dezembro de /-12-/' \
| sed -E 's/.SX150.jpg$/.jpg/'

Execute o script em blocos, por exemplo, use o script para baixar os ebooks de 10 páginas do Conteúdo Digital. Para fazer isso, edite as variáveis p e pmax, que correspondem respectivamente à página inicial e a página final do bloco. Isso é útil para evitar erros durante o processamento muito longo. Em 26/09/2024, alguns erros interromperam o script, por exemplo, a amazon pedindo para fazer login novamente.

Depois do processamento em blocos, una manualmente os arquivos baixados.xxxxx.csv e salteados.xxxxx.csv.

Use o script baixar_ebooks_comprados_amazon_CORRIGIR_CSV.sh para corrigir os CSVs gerados pelo robô baixar_ebooks_comprados_amazon.json.

Use este comando para baixar as capas dos ebooks:

cat baixados.xxxxx.csv | grep jpg | awk -F, '{print "wget", "-q","-O", $1 ".jpg", $NF, ";", "sleep 1"}'
wget -q -O B073DPPFN4.jpg https://m.media-amazon.com/images/I/31MJtbPlN1L.jpg ; sleep 1
wget -q -O B07DPWHF7D.jpg https://m.media-amazon.com/images/I/418glJ8k7LL.jpg ; sleep 1
wget -q -O B0CLL1TFJF.jpg https://m.media-amazon.com/images/I/417kB7GymfL.jpg ; sleep 1 # ...
@fabiolimace
Copy link
Author

fabiolimace commented Sep 25, 2024

UI.Vision RPA: https://addons.mozilla.org/pt-BR/firefox/addon/rpa/

UI.Vision RPA (formerly Kantu) is open-source Robotic Process Automation (RPA) software for task and test automation. It is 3 tools in 1: Visual web browser automation, Selenium IDE and AI-powered desktop automation for Windows, Mac and Linux.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment