Python - Error con Selenium al extraer datos

 
Vista:

Error con Selenium al extraer datos

Publicado por Mario (1 intervención) el 05/07/2022 16:04:46
Hola amigos! Estoy tratando de sacar los datos de Bwin con Selenium para mi bot de apuestas, pero por algún motivo lo que funciona para la liga española o la italiana no funciona para la premier, siendo en principio la misma estructura html en todos los casos. En algo estoy fallando, así que si alguien sabe donde esta el fallo se lo agradeceré mucho. El código contiene unas funciones que son IniciaDriver() y limpia_listas() que están en otro modulo, a continuación presento el código de ambas funciones y después el del resto del código. Para probar el código en las distintas ligas habría que cambiar la url en cada caso.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def IniciaDriver():
    from pruebamodulos1 import limpia_listas,uno_x_dos
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    import time
    time.sleep(5)
    # declaramos la ruta del chromedriver
    ruta = ChromeDriverManager(path='./chromedriver').install()
 
    # Personalizamos las opciones del webdriver
 
    options = Options()
    options.add_argument("--disable-blink-features=AutomationControlled")
    user_agent = 'https://developers.whatismybrowser.com/useragents/parse/?analyse-my-user-agent=yes'
    options.add_argument(f"user-agent={user_agent}")
    options.add_argument("--disable-web-security")
    options.add_argument("--disable-extensions")
    options.add_argument("--ignore-certificat-errors")
    options.add_argument("--no-sandbox")
    options.add_argument("--no-first-run")
    options.add_argument("--no-proxy-server")
 
    # terminamos de liquidar los detalles y guardamos la web en la variable driver
    s = Service(ruta)
    driver = webdriver.Chrome(service=s, options=options)
    return(driver)

La siguiente funcion coge una lista de web elements y obtiene el texto
1
2
3
4
5
6
7
8
9
def limpia_listas(lista):
    lista_txt = []
    for i in lista:
        lista_txt.append(i.text)
    lista_final = []
    for i in lista_txt:
        if i != '':
            lista_final.append(i)
    return(lista_final)

Por ultimo el codigo completo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def Liga():
        import selenium
        from pruebamodulos1 import IniciaDriver, limpia_listas, uno_x_dos, uno_dos
        from selenium.webdriver.common.by import By
        from selenium import webdriver
        from webdriver_manager.chrome import ChromeDriverManager
        from selenium.webdriver import ActionChains
        driver = IniciaDriver()
        driver.get('https://sports.bwin.es/es/sports/f%C3%BAtbol-4/apuestas/espa%C3%B1a-28')
        containers = driver.execute_script('return document.querySelectorAll("ms-event.grid-event.ms-active-highlight");')
        n = len(containers)
        final = []
        for i in range(0,n):
            partidos = containers[i].find_elements(By.CSS_SELECTOR, "div.participant-container")
            partidos = limpia_listas(partidos)
            cuotas = containers[i].find_elements(By.TAG_NAME, "ms-font-resizer")
            cuotas = limpia_listas(cuotas)
            cuotas = cuotas[:3]
            final.append(partidos)
            final.append(cuotas)
        print(final)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder