我有这些包括:
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")
当该元素可能存在或不存在时?
答案 0 :(得分:9)
您可以使用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"))