Skip to content

Instantly share code, notes, and snippets.

@F041
Created April 28, 2024 09:41
Show Gist options
  • Save F041/3edf69b287333020818f15b35108056f to your computer and use it in GitHub Desktop.
Save F041/3edf69b287333020818f15b35108056f to your computer and use it in GitHub Desktop.
Ridurre il carico di lavoro aziendale tramite automazione che compra prodotti di link specifici tramite Amazon.
# idealmente questo codice va integrato con un cameriere dei dati (API)
# che chiama questo servizio quando vengono raggiunti numeri "critici"
# sulle scorte, presenti ad esempio su un foglio di calcolo di Google
# o/e ERP
library("RSelenium")
### Parte scorrevole ----
# create driver object
driver<-rsDriver(browser="firefox", port=4550L, verbose=F, chromever = NULL)
#scelgo FireFox per un motivo preciso. Se non lo hai, installalo
# pulisci memoria, console, objects prima di riavviarlo
# Apri la pagina di Amazon, ovviamente business.amazon ha più senso
driver$client$navigate("https://www.amazon.it")
# qui inserirai gli acquisti periodici: ho inserito prodotti per la pizza
tutti_urls <- c("https://www.amazon.it/Farina-Caputo-Pizzeria-Kg-Cartone/dp/B07QCGS8JH/ref=sr_1_1?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=3B57LQMB2P209&dib=eyJ2IjoiMSJ9.wbge344vLMdlohBrasE6P5cgk0DxKFEdlZI221RPOpbuSpxfeg7dGptWwuWs45OnC2H-L6mebdBXIpll_YtSZp8WA7T-hgl6TZYJDqMrb74zxmI6WT-qkpG2oHG-np1P_vtLO_ya3I1vu5ixh1LOnjR3rxYgaDjUIRzXIr1vzuofYfJG8kIDpV_AYul6ZEn6RMyXHYL04yTknESQC2cLk8YOmFZyoxBUC8SVnrAvAvQbFcsjtp5wg0KU_pYXGyt4SyTzdsEhKbLMnpHG1ArDuQFhu4feKDKd_Xq0dPksp68.7fV-948QxQrzI9iQpHOl6MO4ceXpYwefuI1fLc86ZNQ&dib_tag=se&keywords=farina+caputo&qid=1714286670&sprefix=farina+caputo%2Caps%2C144&sr=8-1",
"https://www.amazon.it/MOZZARELLA-PIZZA-MONTANINA-5Kg-ABBASCIANO/dp/B0C4LHYSC1/ref=sr_1_10?crid=3HF5ELPOZ6IEA&dib=eyJ2IjoiMSJ9.ygT1FDeOXWue8yX7pOXfhsoPpyeyXA0M3mWx27Xuu0uyyBq616MVGfeV1wAoxVYYGX8s65Rd3rzHe6Ppg_UjafvjEPWR5OSM4Kl3FbGyNmn554Jf3-zH5mBdzdzeqMmNDLYk_SWYiBIJdNT7oFOOelSWST79OFRp7omrvkqqO5r44dAVMpv3T5pgV6e2nltSdP-n_QX2hAdFag8vrGbkco1bisyHMUyx0O8I6JXMu9C6xyDrbwgAPfiJf8nlK7PJVYzgL2VOUSPQmoZekQJBgGs9oZsb1mDM6zcQZ0dbREo.KqyR7iA-HqWodH2tXWptupGqyDkGcJ1wqSfZj1il_nQ&dib_tag=se&keywords=mozzarella+per+pizza&qid=1714286706&sprefix=mozzare%2Caps%2C115&sr=8-10",
#"https://www.amazon.it/Passata-pomodoro-vetro-Mutti-cartone/dp/B09JT1L18P/ref=sr_1_3?crid=215UVAXCMH621&dib=eyJ2IjoiMSJ9.XcufPe7nGvkWcVUSWjPNgEZpKl9NxuMA_qjs1rWcy2MP7l_C_HQVgTVicAebBJ4irRuDLg8PUBmd7oqHa-K_bQIBS3wgewJtYCORNgBCTi09zvnFTqrcDTqtXrrFaZJQbOrn9GZ-0S6JQga7TfUNo3c2pVuVeFx_f5L2y3hEoeD807m1ohfTMXaLZGOqXPKaeH-ll6X9nCLVaI2pViL7Djxe25deRW1zj-Er8uZ4KYqFqqLnCSgVXd8Xnas6guaAaz7OrSrYwbakERkiNjEatRs-4JsjBDyjFjizCdrmO6o.fISYDOKOZJrzmsVZUebDCulWZs8-5YtBxKWIVh6QV5w&dib_tag=se&keywords=pomodoro+mutti&qid=1714288485&sprefix=pomodoro+%2Caps%2C92&sr=8-3",
"https://www.amazon.it/Calabrese-Valle-Crati-Condimenti-Bottiglie/dp/B081M6Y24Q/ref=sr_1_20?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1BS9YFSTOBUQM&dib=eyJ2IjoiMSJ9.gR3VrzQm2azxCS9X4X_pEZsc3_FehjXEVzcVQB2-FtRjXhBfrjFYyv33pQV-s__ENG85pnDDQhjVW82oRLw1TW58LgFspBgJ9fG1bjB3gAcKqpaCfTk4r4luFxbbpCWMqM2iwNqnr8lrT8iy36zdqXqaPuCYXA2I8pxTORNp9J8ZCeUx7zjfuuNBtviIl6IluYjvcgCe5pVlan6-BqlR5QL2wcAgXoqn96oKi7SMFeZPg0huRjZb_aCL0pBVmUFOWNyrVNtTQZLDNBxVJWN8FWmwN0Rw-LyMOXMvzOj-8xI.EMTmlgRjOBTuy95M02VaIErMj4IBtWBHuABjsPO8kBQ&dib_tag=se&keywords=bottiglia+pomodoro&qid=1714288621&sprefix=bottiglia+pomodoro%2Caps%2C101&sr=8-20")
for(urls in tutti_urls)
{
testo <- ""
for(url in urls)
{
# Apri la pagina e aspetta che carica interamente
driver$client$navigate(url)
Sys.sleep(2) # 2 secondi, occhio
# Cerca tag div che dice se l'ingrediente, materia prima risulta disponibile nel magazzino
div <- try(driver$client$findElement(using = "id", value = "availability"))
#attenzione, il nome di quel "value" PUO' cambiare
# SE la pagina non ha quel tag, assumi assenza in magazzino. Ipotesi forte
if(class(div) == "try-error")
next
else
{
# Ottieni testo da div tag
testo <- div$getElementText()[[1]]
break
}
}
if(testo == "Disponibilità immediata")
#attenzione, testo può cambiare. Es. "Disponibilità 2" o comunque un numero
{
aggiungi_al_carrello <- driver$client$findElement(using = "id", value = "add-to-cart-button")
aggiungi_al_carrello$clickElement()
}
Sys.sleep(5)
}
### Parte delicata ----
# Le credenziali non vanno MAI digitate all'interno di un codice
# Esistono varie soluzioni per conservare segreti: Keyring, creare file specifici, etc.
# Vai alla pagina del carrello
driver$client$navigate("https://www.amazon.it/gp/cart/view.html?ref_=nav_cart")
# Trova bottone "Procedi all'ordine"
prosegui_ordine <- driver$client$findElement(using = "name", value = "proceedToRetailCheckout")
# Clicca bottone precedente
prosegui_ordine$clickElement()
# Trova rettangolo inserimento nome utente
username_input <- driver$client$findElement(using = "id", value = "ap_email")
# Inserisci nome utente
username_input$sendKeysToElement(list("SEGRETO_UTENTE")) #OCCHIO
# Invia nome utente
username_input$submitElement()
# Trova rettangolo inserimento password
password_input <- driver$client$findElement(using = "id", value = "ap_password")
# Inserisci password
password_input$sendKeysToElement(list("SEGRETO_PASSWORD")) #OCCHIO
# Invia password
password_input$submitElement()
# Aspetta il caricamento della password
Sys.sleep(2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment