Czytanie elementów strony za pomocą selenium

0

Witam,
Chce wyłuskać pewne dane ze strony, ale nie mam pomysłu czy dobrze chcę to zrobić. Nie jestem pewny czy da się to w ogóle zrobić. Potrzebuje wyciągnąć to co jest w span na SS "113". Tak na prawdę potrzebuje całą tabelę wyciągnąć ale wystarczy żebym zobaczył zasadę działania co robię źle. Strona jest odświeżana co chwilę, a w źródle strony jest klasa init, w której nic nie ma. Dopiero po wejściu na stronę uzupełnia się o potrzebne mi dane. Nie jestem pewny ale pewnie to AJAX.

0

@Kardam: Możesz napisać o jaką stronę chodzi? :)

0
artur_waw napisał(a):

@Kardam: Możesz napisać o jaką stronę chodzi? :)

http://sip.ztm.kielce.pl/odjazdyFS.aspx?id=437 Dokładnie o tą

0

Jasne że się da... to python.. wszystko się da ;)

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

driver = webdriver.Firefox()
driver.get("http://sip.ztm.kielce.pl/odjazdyFS.aspx?id=437")

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "realtable"))
    )
finally:
    elements = element.find_elements_by_tag_name('tr')
    print(len(elements))
    print(elements[1].text)
0

Z telefonu pisze. Ale otwkrz sobie konsole i zrob filtracje na network xhl chyba tak sie to pisalo i oblukaj sobie pakiety.

Tam w jsonie moga byc te dane wysylane jak zlapiesz to sprawdz jaki to jest reqest http i sprobuj go soreparowac.

0

@Arthan, dziękuję lepiej nie mogłem sobie tego wymarzyć. W pythonie nigdy nie pisałem, uzyłem go dopiero pierwszy raz do tego projektu. Powiem Ci, że w Pythonie wszystko się da i bardzo zaimponował mi ten język. Mam jeszcze tylko pytanie ponieważ ten kod zmodyfikowałem sobie, nie wiem czy nawet poprawnie bo chciałem całą tablice wyciągać i nie wiem czemu pierwszy rekord to tylko Numer + czas, a pomijany jest ten string "kierunku". Dziękuje jeszcze raz. Teraz rozgryzam pythona, żeby to jakoś do pliku wrzucić :)

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

driver = webdriver.Firefox()
driver.get("http://sip.ztm.kielce.pl/odjazdyFS.aspx?id=437")

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "realtable"))
    )
finally:
    elements = element.find_elements_by_tag_name('tr')
    for i in range(0, 10):
        print(elements[i].text)
0

W momencie odczytu ta komórka ma visibility na hidden, dopiero po chwili się robi widoczna. Text zwraca tylko widoczny tekst.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
driver = webdriver.Firefox()
driver.get("http://sip.ztm.kielce.pl/odjazdyFS.aspx?id=437")

try:
    table = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "realtable"))
    )
finally:
    elements = table.find_elements_by_tag_name('tr')
    for element in elements:
        #print(element.get_attribute('innerHTML'))
        spans = element.find_elements_by_tag_name('span')
        
        route = spans[0].get_attribute("textContent")
        frow = spans[1].get_attribute("textContent")
        time = spans[2].get_attribute("textContent")
        
        print("{} {} {}".format(route, frow, time))
0

@Arthan: dziękuje bardzo za pomoc sam na pewno nie dałbym sobie rady. Fachowa pomoc. Jak sam coś kleiłem to nie wychodziło bo nie miałem pojęcia o tym, że trzeba poczekać aż komórka będzie widoczna. Dzięki Twojej pomocy projekt ruszył z miejsca od tygodnia :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1