Как указать, какие данные следует печатать с помощью Selenium Python

#python #html #selenium #selenium-webdriver #selenium-chromedriver

Вопрос:

У меня есть этот код:

 from keyboard import press_and_release
from selenium import webdriver
from selenium.webdriver.common.by import By

url = 'https://www.yr.no/nb'

def weather(url, webdriver):
    webdriver.get(url)  # Goes to the HTML-page of the given URL
    for li_values in webdriver.find_elements(By.CSS_SELECTOR, "ol.daily-weather-list__intervals li"):
        print(li_values.text   "n")


def forecast():
    print('Hello, I can search up the weather for you.')
    driver = webdriver.Chrome(r"C:UsersAmalieDownloadschromedriver_win32chromedriver.exe")  # Open Google Chrome
    driver.get(url)  # Goes to the HTML-page of the given URL

    while True:
        inp = input('Where shall I search? Enter a place in :').capitalize()  # Ask for input
        print('Alright, checking the weather in '   inp   '...')

        "Search for a place"
        driver.find_element_by_id("page-header__search-button").click()  # Find and click on search input box
        driver.find_element_by_id("page-header__search-input").send_keys(inp)  # Enter input
        press_and_release('enter')  # Click enters
        driver.find_element_by_xpath('//*[@id="page-header__search"]/ol/li[1]').click()  # Click on 1st suggested option
        break
    cURL = driver.current_url
    weather(cURL, driver)

    driver.close()
    driver.quit()
forecast()
 

Что дает мне этот результат:

 Hello, I can search up the weather for you.
Where shall I search? Enter a place in :bergen
Alright, checking the weather in Bergen...

I dag 14. juni
Ettermiddag: skyet
Kveld: skyet
Maksimum/minimum temperatur:
13°/12°
Nedbør
0,5mm
Vind:
5
m/s
Se time for time





Ettermiddag: skyet

Kveld: skyet

Tirsdag 15. juni
Natt: regn
Morgen: regn
Ettermiddag: delvis skyet
Kveld: skyet
Maksimum/minimum temperatur:
13°/10°
Nedbør
4,6mm
Vind:
4
m/s
Se time for time

Natt: regn

Morgen: regn

Ettermiddag: delvis skyet

Kveld: skyet

Onsdag 16. juni
Natt: skyet
Morgen: regn
Ettermiddag: regn
Kveld: regn
Maksimum/minimum temperatur:
16°/10°
Nedbør
10mm
Vind:
9
m/s
Se time for time

Natt: skyet

Morgen: regn

Ettermiddag: regn

Kveld: regn
 

и т.д…

Как я могу выбрать печать данных только с сегодняшнего, завтрашнего дня и т.д., Как показано ниже:

 I dag 14. juni
Ettermiddag: skyet
Kveld: skyet
Maksimum/minimum temperatur:
13°/12°
Nedbør
0,5mm

Tirsdag 15. juni
Natt: regn
Morgen: regn
Ettermiddag: delvis skyet
Kveld: skyet
Maksimum/minimum temperatur:
13°/10°
Nedbør
4,6mm
 

Я знаю xpath, но я подумал, что мне нужно использовать идентификаторы или что-то в этом роде, но я очень новичок в HTML, поэтому я не знаю, есть ли уже функция для этого или мне нужно написать код самому.

Комментарии:

1. Хмм… Я получаю только пустую строку вывода из вашей программы…

2. Я сейчас тестирую его, и, похоже, он работает только иногда, а в других случаях он просто выводит «Законченный процесс».. Я не знаю, почему это так, поэтому мне придется это выяснить. Но когда я запускаю его несколько раз, я получаю желаемый результат 1 в 3 раза. Все, что мне нужно знать сейчас, это как просто получить нужные данные и отбросить ненужные данные

Ответ №1:

Например, чтобы получить первые два элемента из списка, вы можете сделать что-то вроде этого:

 def weather(webdriver):
    webdriver.get(url)  # Goes to the HTML-page of the given URL
    list_xpath = "//ol[@class='daily-weather-list__intervals']/li[@class='daily-weather-list-item']"
    all_items = webdriver.find_elements_by_xpath(list_xpath)
    for li_values in all_items[:2]:
        print(li_values.text   "n")