Selenium és python html táblázat betöltési probléma

Ez a téma lezárásra került a moderátor által.
Selenium és python html táblázat betöltési probléma
2020-12-28T16:31:15+01:00
2020-12-30T16:40:52+01:00
2022-12-06T16:30:36+01:00
Lukács Tibor
Az olasz Serie A wide táblázatának adatait szeretném elérni a
megadott url-ről. Alaphelyzetben azonban a sima League table jelenik meg az oldalon. A wide table a táblázat jobb oldalán lévő dropdown menüből érhető el. A megfelelő elemeket xpath-tal próbáltam megtalálni. A gondom az, hogy 10 próbálkozásból kb. 1-2 működik, többi alkalommal különböző hibajelzéseket ad (timeout, element non clickable, stb). A kérdésem az lenne, hogy alapvetően a kód hibás vagy hiányzik még belőle valami? Vagy a wait-tek idejét kell más értékre állítani? Az oldal betöltésekor megjelenik egy felugró ablak, ami cookie-k, stb.jóváhagyását kéri. Esetleg ez is bezavarhat? Nem vagyok még jártas a webscrapingben, a Seleniumban pláne nem. Válaszokat előre is köszönöm.

#!/usr/local/bin/python3.8 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC url = "https://int.soccerway.com/national/italy/serie-a/20202021/regular-season/r59286/" driver = webdriver.Chrome() driver.get(url) driver.implicitly_wait(20) dropdown = '/html/body/div[6]/div[3]/div[2]/div/div[1]/div[2]/div[7]/div/div[1]' widetable = '/html/body/div[6]/div[3]/div[2]/div/div[1]/div[2]/div[7]/div/div[1]/div/ul/li[3]' WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, dropdown ))).click() WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, widetable))).click()
Mutasd a teljes hozzászólást!
Szívesen!
Én sem értek annyira ezekhez a lekérdezésekhez. Csináltam egy ilyen verziót, ami nálam 5-ből 5-ször helyesen lefut:
- elfogadja a cookie-t,
- lenyitja a tábla fajtáknak a menüjét,
- kiválasztja a wide táblát.

cookie = '//*[@id="qc-cmp2-ui"]/div[2]/div/button[2]' selector = '//*[@id="page_competition_1_block_competition_tables_12-wrapper"]/div[1]/div/div/span' widetable = '//*[@id="page_competition_1_block_competition_tables_12-wrapper"]/div[1]/div/ul/li[3]' WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, cookie))).click() WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, selector))).click() WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, widetable))).click()
Mutasd a teljes hozzászólást!

  • Én bele szoktam rakni egy do while ba az eseményt, nem a legszebb megoldás, de nálam eddig bejött.
    Mutasd a teljes hozzászólást!
  • És mi a feltétel a ciklusban?
    Mutasd a teljes hozzászólást!
  • A programhoz most nem tudnék érdemben hozzászólni, viszont van egy másik oldal, ahol kb pont ugyan azokat az adatokat el tudod érni linkből (és nem kell a menüvel szöszmötölnöd):
    soccerstats.com
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen! Ez valóban jó, mert minden táblázatnak más az url címe, így könnyebb elérni. Ismertem ezt az oldalt korábbról, de mostanában nem néztem rá. Eddig a bbc.com, footystat.org, soccerway.com és az fctables.com oldalakat néztem, de ezeken külön táblázatban vannak az otthoni és idegenbeli adatok, és dinamikusan töltődnek be. Itt viszont minden megvan egyben! :) Persze ettől függetlenül azért érdekel az ugyanazon url-n lévő dinamikus táblázatok elérése. Köszi még egyszer!
    Mutasd a teljes hozzászólást!
  • Szívesen!
    Én sem értek annyira ezekhez a lekérdezésekhez. Csináltam egy ilyen verziót, ami nálam 5-ből 5-ször helyesen lefut:
    - elfogadja a cookie-t,
    - lenyitja a tábla fajtáknak a menüjét,
    - kiválasztja a wide táblát.

    cookie = '//*[@id="qc-cmp2-ui"]/div[2]/div/button[2]' selector = '//*[@id="page_competition_1_block_competition_tables_12-wrapper"]/div[1]/div/div/span' widetable = '//*[@id="page_competition_1_block_competition_tables_12-wrapper"]/div[1]/div/ul/li[3]' WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, cookie))).click() WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, selector))).click() WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, widetable))).click()
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen! Ez tényleg mindig működik! Nálam a cookie elfogadó popup ablak klikkelése nem volt megoldva, de te szépen megcsináltad. Én full xpath-ot használtam az elemek keresésére, te relatívat.  A megoldásodat beépítettem a teljes kódba, ami táblázat adatait csv fájlba menti, majd abból sqlite adatbázist csinál. A teljes kódot csatoltam. Természetesen ez így csak egy bajnokság, majd ciklussal megoldom, hogy több táblázat adatait is le tudja húzni. De valószínűleg inkább az általad is ajánlott soccerstats.com adataival fogok dolgozni. Ott aztán tényleg mindenféle statisztika van. A terv az, hogy először adatbázisokat csinálok, majd írni akarok egy tippmix josló programot, ami ezeket az adatbázisokat használja. Vagy pythonban írom vagy rubyban, de az is lehet, hogy nimben. Még egyszer nagyon szépen köszönöm a megoldásodat! Természetesen a pontokat megkapod érte! :)
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Igazán nincs mit, próbálkozik az ember (ha már egyszer voltam úttörő a múlt évezredben ).
    Köszönöm a pontot (Igaz elég kezdő vagyok itt, nem tudom az mire lesz jó nekem).

    A témánál maradva:
    Egy évvel ezelőtt én is szórakoztam hasonló ötlettel (onnan is a link). A soccerstats-on kívül leszedtem napi szinten a flashscore-ról is az összes foci, kézi, röpi és kosármeccset természetesen táblázataikkal együtt. Ezeket mentettem szintén sql-be (xammp volt a gépemen). Annyira nem értek a sportfogadáshoz (sem) vagy csak pusztán logikátlan volt a kitalációm és nem váltotta be a hozzá fűzött reményeket (kb annyira voltam "sikeres" a programmal, mint nélküle).
    (Szórakoztam a töbszálú lekérdezéssel is, hisz volt olyan hétvégi nap, amikor jócskán 1000 fölött volt csak a focimeccsek száma. Természetesen itt meg összegabalyodott az sql-el. Megpróbáltam OOP-t megvalósítani, azt többé kevésbé sikerült is emlékeim szerint - itt jegyezném meg, hogy sosem tanultam programozást iskolai keretek között.)

    Remélem neked sokkal jobban fog működni a programot, sok sikert kívánok hozzá!
    Mutasd a teljes hozzászólást!
Ez a téma lezárásra került a moderátor által.
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd