Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alternativa molto semplice #5

Open
TorgeTorge opened this issue Jan 31, 2024 · 5 comments
Open

Alternativa molto semplice #5

TorgeTorge opened this issue Jan 31, 2024 · 5 comments

Comments

@TorgeTorge
Copy link

Ciao,
considerando che il bot non funzionava, ho realizzato un'alternativa molto semplice(e mediocre) che però funziona e mi ha aiutato a trovare finalmente un posto libero per prenotare.
L'unico vero problema, è che a quanto parte tutti gli slot si resettano di notte, quindi bisognerebbe capire a che ora disattivarlo/attivarlo, cosi da non inviare notifiche continue su Telegram.
In sintesi, tramite bs4, cerca i giorni della settimana nella pagina delle prenotazioni e se ne trova uno, manda la notifica su Telegram.
Per accedere, carica la pagina della polizia di stato e attende un "go" in console prima di continuare i check in modo ripetuto.
Spero possa aiutare, anche se mi rendo conto che non è un granchè!

from selenium import webdriver
from bs4 import BeautifulSoup
import time
import telebot
from datetime import datetime
BOT_TOKEN = ('ILMIOTOKEN')
bot = telebot.TeleBot(BOT_TOKEN)
from selenium.webdriver.common.by import By
def verifica_disponibilita_sedi(url_pagina):

    @bot.message_handler(commands=['start', 'hello'])
    def send_welcome(message):
        bot.reply_to(message, "Howdy, how are you doing?")
    # Inizializza il driver di Selenium (assicurati di avere il driver del browser corretto installato)
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--no-sandbox')  # Add any additional options you need

    driver = webdriver.Chrome(options=chrome_options)
    driver.get(url_pagina)
    # Richiedi l'input dalla console
    input_start = input("Digita 'go' e premi Invio per avviare lo script: ")

    if input_start.lower() != 'go':
        print("Input non valido. Lo script verrà terminato.")

        return
    try:
        while True:
            # Apri la pagina web
            driver.get(url_pagina)
            time.sleep(5)
            # Ottieni il sorgente HTML della pagina
            html_source = driver.page_source

            # Utilizza BeautifulSoup per analizzare il codice HTML
            soup = BeautifulSoup(html_source, 'html.parser')
            element = driver.find_element(by=By.XPATH, value='//*[@id="tabComuneScelto"]')
            html_code = element.get_attribute('outerHTML') 
            # Lista dei giorni della settimana
            giorni_settimana = ['lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato', 'domenica']
            if any(valore in html_code for valore in giorni_settimana):
                print("Almeno uno dei valori è presente nella stringa.")
                # Send message
                oggi = datetime.now()
                messaggio = 'Disponibilità trovata!!!! ' + oggi.strftime("%d/%m/%Y %H:%M:%S")
                bot.send_message(754730135, messaggio)
                print(oggi.strftime("%d/%m/%Y %H:%M:%S"))
            else:
                print("Nessun valore è presente nella stringa.")
            time.sleep(60)

    except Exception as e:
        print(f"Si è verificato un errore: {e}")

    finally:
        # Chiudi il browser alla fine
        driver.quit()
    bot.infinity_polling()
# Url sito poliziadistato
verifica_disponibilita_sedi("https://passaportonline.poliziadistato.it/cittadino/a/sc/wizardAppuntamentoCittadino/sceltaSede")
@lucamattiazzi
Copy link
Owner

ciao! grazie mille!
il mio bot fa esattamente la stessa identica cosa, solo usando puppeteer al posto di selenium, il problema è che la pagina che apri richiede l'autenticazione con spid!
non so come il tuo script possa funzionare, fai tu l'autenticazione a mano?

quello che io ho fatto è automatizzare l'accesso tramite spid, con inserimento di password e click sui vari bottoni, ma un paio di mesi fa la pagina ha subito un redesign e mi ha scombinato tutta l'automatizzazione!
appena avrò tempo (spero a breve, ma boh?) dovrei rimettere a posto quella parte!

@TorgeTorge
Copy link
Author

TorgeTorge commented Jan 31, 2024

Ciao,
si, faccio l'autenticazione a mano, intanto serve comunque la conferma tramite telefono per concludere l'accesso allo SPID
Nel momento in cui ho concluso tutta l'autenticazione e inserito i dati per la richiesta del passaporto, scrivo "go" sul terminale e lo script esegue il controllo periodico della disponibilità.
Per usarlo serve:
bs4
selenium
telebot
Inoltre lo faccio girare continuamente su una vps di Ionos, gratuita per i primi 3 mesi e poi soltanto 1,22 al mese.

@lucamattiazzi
Copy link
Owner

Ecco, non è dissimile dalla mia soluzione (il mio gira(va) sul server che ho in casa), ma considera che l'autenticazione ti dura mi pare ~1 giorno, poi ti richiederà di autenticarti via spid.
Avendo io automatizzato l'autenticazione, una volta al giorno al mattino ricevevo una notifica sul mio cellulare per confermare l'autenticazione via spid, per il resto il server faceva tutto il resto da solo!
grazie mille per l'alternativa!

@TorgeTorge
Copy link
Author

Ecco, non è dissimile dalla mia soluzione (il mio gira(va) sul server che ho in casa), ma considera che l'autenticazione ti dura mi pare ~1 giorno, poi ti richiederà di autenticarti via spid. Avendo io automatizzato l'autenticazione, una volta al giorno al mattino ricevevo una notifica sul mio cellulare per confermare l'autenticazione via spid, per il resto il server faceva tutto il resto da solo! grazie mille per l'alternativa!

In realtà a me dura parecchi giorni, non ho mai calcolato quanti ma sicuramente più di 2 o 3. Magari verificando la scandeza dei cookie si riesce a capire l'effettivo timeout della sessione.
Figurati per il codice, spero possa aiutare qualcuno!!

@ardubev16
Copy link

Ciao, io ho implementato un'alternativa ispirandomi al tuo script rendendola un po' piu' strutturata. Non e' bulletproof ma ha funzionato abbastanza bene, se volete dare un'occhiata la repo e' questa: passabot.

Volevo anche indagare quanto scritto nella issue #4 perche' avendo prenotato, con selenium non mi autofilla piu' i dati, ma prima di meta' settimana prossima non avro' tempo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants