Skip to main content
 首页 » 编程设计

Python Selenium(等待框架、元素查找)

2025年05月04日9sxdcgaq8080

我有这些包括:

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

浏览器设置通过

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

但有时我会这样做

browser.switch_to_frame("nameofframe") 

而且它不会工作(有时会,有时不会)。

我不确定这是不是因为 Selenium 在执行其余代码之前实际上并没有等待页面加载或其他原因。有没有办法强制加载网页?

因为有时候我会做类似的事情

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() 

它在大多数情况下都能很好地工作,但有时我会遇到找不到“相关链接文本”的错误,因为它无法“看到”它或其他类似内容。

此外,是否有更好的方法来检查元素是否存在?即,最好的处理方式是什么:

browser.find_element_by_id("something") 

该元素何时可能存在或可能不存在?

请您参考如下方法:

你可以使用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"))