Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Selenium - nevidí elementy dotáhnuté ajaxem

Ahoj,

mám jednu stránku, kde se formulář načítá ajaxem asi tak 10 vteřin a během toho selenium drží session, takže se nemůže v průběhu dít nic jiného (to je dobře) a po úplném načtení formuláře se teprve pokračuje v mém kódu.
Problém je, že když chci ten formulář vyplnit, tak mi to hází chybu "No such element: unable to locate element ...", i když tam ten element už je ve stránce načtený.

Zkusil jsem v cyklu třeba minutu volat:

driver.find_element_by_id(element_id).send_keys('nějaká hodnota')

a po každém neúspěšném pokusu čekat

time.sleep(1)

,
zkoušel jsem i

driver.implicitly_wait(30)

,

WebDriverWait(driver, 30).until(EC.presence_of_element_located(('id', element_id)))

a i jsem se pokusil pole vyplnit spuštěním JS na stránce, ale bez úspěchu, pořád to hází chybu, že element se nepodařilo najít.

Kde je problém?

Díky.

Předmět Autor Datum
i jsem se pokusil pole vyplnit spuštěním JS na stránce, ale bez úspěchu, pořád to hází chybu, že ele…
hynajs 26.09.2020 10:14
hynajs
Na úvodní stránce se přihlásím, pak kliknu na jeden odkaz, kde se zobrazí jedna URL a následně se as…
polo1 26.09.2020 10:54
polo1
Měla by být naplněna hodnota element_id a řetězec by měl být: driver.execute_script('document.getE…
hynajs 26.09.2020 11:01
hynajs
To element_id tam mám přímo jako ten string, akorát sem jsem ho nechtěl kopírovat, protože je to cel…
polo1 26.09.2020 11:50
polo1
A co vypíše console.log(document.getElementById("nejake_super_hodne_dlouhe_id")?1:0); ?
hynajs 26.09.2020 11:56
hynajs
Screen v příloze. Poprvé jsem ten log nechal vypsat v kódu a podruhé jsem to zkusil ručně přímo v pr…
polo1 26.09.2020 12:41
polo1
Kde jsi přišel na to: driver.find_element_by_id(element_id) Nemělo by to spíš být: driver.findEle…
Wikan 26.09.2020 12:56
Wikan
No, možná bych měl upřesnit i jazyk, ve které to píšu. Python. Toto je obecná metoda, ale existuje i…
polo1 26.09.2020 13:04
polo1
Není na té stránce iframe?
Wikan 26.09.2020 13:13
Wikan
Ano, ten element je hluboko v iframu.
polo1 26.09.2020 13:44
polo1
https://www.selenium.dev/documentation/en/webdriver/browser_manipulation/
Wikan 26.09.2020 13:50
Wikan
Ano, toto vyřešilo můj problém: driver.switch_to.frame(0) Díky moc. :)
polo1 26.09.2020 15:12
polo1
selenium je mrtve, pouzivej puppeteer a nebudes mit takove problemy poslední
Propiska 03.10.2020 22:30
Propiska

Na úvodní stránce se přihlásím, pak kliknu na jeden odkaz, kde se zobrazí jedna URL a následně se asi 10 vteřin načítá nějaký formulář a tabulka s daty (to jsem nenapsal, proto to trvá tak dlouho).
Já potřebuju do toho formuláře vyplnit jedno pole a potvrdit, aby se mi vyfiltrovalo jen to, co potřebuju.

Do stránky jsem poslal tento kód:


driver.execute_script('document.getElementById(element_id).value = "nějaká hodnota";')

PS: element_id je samozřejmě string v mém kódu. :)

To element_id tam mám přímo jako ten string, akorát sem jsem ho nechtěl kopírovat, protože je to celkém dlouhé ID, tak jsem ho jen zkrátil na klíčové "element_id". :)

driver.execute_script('document.getElementById("nejake_super_hodne_dlouhe_id").value = "nějaká hodnota";')

Po proběhnutí tohoto řádku mi to taky vyhodí podobnou chybu, taky že element s ID "nejake_super_hodne_dlouhe_id" neexistuje.

Zpět do poradny Odpovědět na původní otázku Nahoru