python selenium automation frames

python - select frame in selenium



Python Selenium(esperando el marco, las búsquedas de elementos) (1)

Puede usar WebDriverWait :

from contextlib import closing from selenium.webdriver import Chrome as Browser from selenium.webdriver.support.ui import WebDriverWait from selenium.common.exceptions import NoSuchFrameException def frame_available_cb(frame_reference): """Return a callback that checks whether the frame is available.""" def callback(browser): try: browser.switch_to_frame(frame_reference) except NoSuchFrameException: return False else: return True return callback with closing(Browser()) as browser: browser.get(url) # wait for frame WebDriverWait(browser, timeout=10).until(frame_available_cb("frame name"))

Tengo estos incluye:

from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.keys import Keys

Navegador configurado a través de

browser = webdriver.Firefox() browser.get(loginURL)

Sin embargo, a veces lo hago

browser.switch_to_frame("nameofframe")

Y no funcionará (a veces lo hace, a veces no funciona).

No estoy seguro de si esto se debe a que Selenium no está esperando que las páginas se carguen antes de ejecutar el resto del código o qué. ¿Hay alguna forma de forzar la carga de una página web?

Porque a veces haré algo como

browser.find_element_by_name("txtPassword").send_keys(password + Keys.RETURN) #sends login information, goes to next page and clicks on Relevant Link Text browser.find_element_by_partial_link_text("Relevant Link Text").click()

Y funcionará bien la mayor parte del tiempo, pero a veces obtendré un error que no puede encontrar el "Texto del enlace relevante" porque no puede "verlo" o alguna otra cosa similar.

Además, ¿hay una mejor manera de verificar si un elemento existe o no? Es decir, ¿cuál es la mejor manera de manejarlo?

browser.find_element_by_id("something")

¿Cuándo ese elemento puede o no existir?