albertopasqualetto / amazon-deals-telegram-bot

Scrape Amazon's deals and send them to a Telegram channel without using Product Advertising APIs or Keepa
MIT License
7 stars 4 forks source link

Errore Message: no such element: Unable to locate element: {"method":"partial link text","selector":"Sconto del 50%"} #7

Closed Raffy142 closed 2 months ago

Raffy142 commented 2 months ago

Ciao, è da un po’ che sta dando questo tipo di errore, hai per caso qualche soluzione? Ti ringrazio in anticipo

Starting taking all urls Message: no such element: Unable to locate element: {"method":"partial link text","selector":"Sconto del 50%"} (Session info: chrome-headless-shell=125.0.6422.141); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception Stacktrace:

0 0x556ce142ae3a

1 0x556ce111445c

2 0x556ce11605b5

3 0x556ce1160671

4 0x556ce11a4f14

5 0x556ce11834dd

6 0x556ce11a22cc

7 0x556ce1183253

8 0x556ce11531c7

9 0x556ce1153b3e

10 0x556ce13f127b

11 0x556ce13f5327

12 0x556ce13dddae

13 0x556ce13f5df2

14 0x556ce13c274f

15 0x556ce141a128

16 0x556ce141a2fb

17 0x556ce1429f6c

18 0x7fb3c022dac3

Traceback (most recent call last): File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "/usr/lib/python3.10/runpy.py", line 86, in _run_code exec(code, run_globals) File "/home/ubuntu/amazon-deals-telegram-bot/amazon-deals-telegram-bot/main.py", line 96, in selected_product_info, already_sent_product_ids = get_random_product_info(deals_ids, already_sent_product_ids) TypeError: cannot unpack non-iterable NoneType object

GoukaMekkyaku commented 2 months ago

Buongiorno @Raffy142, mi permetto di risponderti io, nonostante non sia collegato in alcun modo agli sviluppatori di questa Repository. Se stai utilizzando questa con le impostazioni predefinite date da loro, ovvero con questo come "deals_page", probabilmente il problema si verifica per via del recente aggiornamento del layout della pagina. Difatti, mentre precedentemente gli url dei prodotti potevano essere presi grazie a questa porzione di codice:

elements_urls = [e.get_attribute("href") for e in selenium_driver.find_elements(By.CSS_SELECTOR, "a[class*='DealCard']")]

ora purtroppo non è più possibile proprio per il cambio del layout. Ho verificato io stesso e l'unico modo per fare una cosa simile è utilizzare questo codice:

elements_urls = [e.get_attribute("href") for e in selenium_driver.find_elements(By.CSS_SELECTOR, "a[class*='a-color-base a-link-normal a-text-normal']")]

Anche in questo caso però sorge un problema dovuto al fatto che, sempre di recente, hanno implementato un caricamento dinamico dei prodotti; questo fa si che se provassi a eseguire il codice come suggerito sopra, ti restituirebbe al più 8 prodotti, e non tutti quelli della pagina. Pertanto, finchè non verrà trovata una soluzione, ti consiglio di sfruttare il codice che avevano suggerito per le pagine di ricerca classiche, indicato in una vecchia discussione avuta con un altro utente e presente a questo link. Spero comunque di esserti stato di aiuto!

albertopasqualetto commented 2 months ago

Ciao @Raffy142 , sì, dev'esserci stata una modifica nelle pagine amazon circa un mese fa, infatti non funziona più nemmeno la nostra istanza.

Al momento personalmente non ho il tempo di occuparmi di rivedere il codice.

Grazie @GoukaMekkyaku per il possibile fix, sentiti libero di aprire una PR.

lorenzo-asquini commented 2 months ago

Ciao @Raffy142 e @GoukaMekkyaku. Anche se ancora non ho avuto tempo di considerare tutti i nuovi casi che si sono venuti a creare, ho aggiornato il codice per gestire il nuovo formato della pagina degli sconti e il caricamento dinamico. Ci sono ancora alcuni problemi, ma almeno ora è quasi totalmente utilizzabile

Raffy142 commented 2 months ago

Vi ringrazio per le risposte esaustive, il problema è risolto grazie al vostro aiuto. Siete grandiosi.