es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Imprima un fragmento de texto utilizando Selenium con varias ventanas abiertas.

Con la ayuda de la comunidad he logrado desarrollar un fragmento de código que imprime la línea de una página web. Sin embargo, ahora quiero que el código imprima el fragmento de texto para varias páginas web que coinciden con un selector xpath específico. ¿Cómo se puede hacer esto?

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium import webdriver
    import time

    driver = webdriver.Chrome("C:\Program Files (x86)\chromedriver.exe")
    driver.get('https://www.flashscore.com/')
    wait = WebDriverWait(driver, 20)
    driver.maximize_window() # Para maximizar la ventana
    time.sleep(2)
    driver.find_element_by_id('onetrust-reject-all-handler').click()

    matchpages = driver.find_elements_by_xpath("//*[@class='preview-ico icon--preview']//*[name()='use']")
    for matchpage in matchpages:
        matchpage.click()
        new_window = driver.window_handles[1]
        original_window = driver.window_handles[0]
        driver.switch_to.window(driver.window_handles[1])
        wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.previewShowMore.showMore"))).click()
        main = driver.find_element(By.XPATH,"//div[@class='previewLine' and ./b[text()='Hot stat:']]").text
        main = main.replace('Hot stat:','')
        print(main)
        driver.close()
        driver.switch_to.window(original_window)

Creo que la siguiente línea selecciona la primera página ‘preview’:

new_window = driver.window_handles[1]

Sin embargo, esto luego debe ajustarse para todas las páginas ‘preview’ en flashscore.com.

Además, las siguientes líneas también deberían incorporarse en las ventanas abiertas, ya que me gustaría imprimir estas líneas para obtener una visión rápida de las estadísticas destacadas de ese día.

main = driver.find_element(By.XPATH,"//div[@class='previewLine' and ./b[text()='Hot stat:']]").text
main = main.replace('Hot stat:','')
print(main)

¡Gracias de antemano! : )

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para imprimir el fragmento de texto para múltiples páginas web que coinciden con un selector xpath determinado, puedes modificar el código para iterar a través de todas las páginas ‘preview’ en flashscore.com y luego usar el mismo código para imprimir las estadísticas destacadas para cada página. Para hacer esto, puedes modificar las siguientes líneas de código:

    matchpages = driver.find_elements_by_xpath("//*[contains(@class, 'icon--preview')]//*[name()='use']")
    for matchpage in matchpages:
        matchpage.click()
        new_window = driver.window_handles[-1]
        driver.switch_to.window(new_window)
        wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.previewShowMore.showMore"))).click()
        main = driver.find_element(By.XPATH,"//div[@class='previewLine'][contains(.,'Hot stat:')]").text
        main = main.replace('Hot stat:','')
        print(main)
        driver.close()
        driver.switch_to.window(driver.window_handles[0])
    

    Aquí hay una breve explicación de los cambios realizados:

    • El selector xpath se ha modificado para seleccionar todas las páginas ‘preview’ en el sitio web utilizando contains(@class, 'icon--preview') en lugar de *@class='preview-ico icon--preview'.
    • El bucle itera a través de todas las páginas ‘preview’ usando for matchpage in matchpages: en lugar de for matchpages in matchpages:.
    • Se ha cambiado el índice de la nueva ventana a -1 en lugar de 1 para cambiar a la última ventana abierta.
    • El selector xpath para el elemento de las estadísticas destacadas se ha modificado para seleccionar todos los elementos que contienen ‘Hot stat:’ en lugar de coincidir exactamente con el texto.
    • Se ha añadido la línea driver.switch_to.window(driver.window_handles[0]) para volver a la ventana original después de imprimir las estadísticas destacadas de cada página.

    Estos cambios te permitirán imprimir las estadísticas destacadas deseadas para todas las páginas ‘preview’ en el sitio web.

Comments are closed.