Python Selenium:等待加载一个元素或另一个元素
我使用以下代码等待加载元素:Python Selenium:等待加载一个元素或另一个元素,python,python-3.x,selenium,webdriverwait,Python,Python 3.x,Selenium,Webdriverwait,我使用以下代码等待加载元素: browser = webdriver.Chrome(executable_path=chromedriver,options=ChromeOpts, desired_capabilities=captain) wait = WebDriverWait(browser, 5) openbrowser = browser.get(url) wait.until(EC.presence_of_element_located((By.ID, 'h1'))) brows
browser = webdriver.Chrome(executable_path=chromedriver,options=ChromeOpts, desired_capabilities=captain)
wait = WebDriverWait(browser, 5)
openbrowser = browser.get(url)
wait.until(EC.presence_of_element_located((By.ID, 'h1')))
browser.execute_script("window.stop();")
然而,我真正需要的是等待一个或另一个元素。
例如,我可以等待'h1'或'rf footer'
谢谢,您可以通过使用
预期条件来实现这一点
from selenium.webdriver.support import expected_conditions
完整的解决方案可以在这里找到:我使用TRY/EXCEPT购买它
openbrowser = browser.get(url) #navigate to the page
try:
wait.until(EC.presence_of_element_located((By.ID, id_stop)))
except:
wait.until(EC.presence_of_element_located((By.ID, 'rf-footer')))
browser.execute_script("window.stop();")
您可以在一个
wait()
操作中组合这两个检查-使用python的lambda表达式,使用用或粘在一起的find\u elements.*()
方法:
element = wait.until(lambda x: x.find_elements_by_id("id1") or x.find_elements_by_css_selector("#id2"))[0]
您甚至可以使用这种方法来获取首先匹配的元素—最后的[0]
。
此解决方案有效,因为find_elements_*()
返回所有匹配元素的列表,如果没有匹配元素,则返回一个空列表(布尔值false)。因此,如果第一个调用没有找到任何东西,则对第二个调用进行评估;这会重复,直到他们中的任何一个找到匹配项,或者时间用完
这种方法的好处是,wait.until()
将在两次传递中的一次之后立即停止,例如速度
与try-catch块相比,在它中,第一个条件必须失败(等待长达X秒,通常为10秒),第二个条件甚至要被检查;因此,如果第一个为false,而第二个为true,则运行时/等待时间至少为X秒加上第二次检查所需的时间。
在最坏的情况下,当两者都为false时,等待时间为2X,而将两者合并时等待时间为X。如果添加其他条件,则只会增加系数。谢谢!我是用TRY/EXCEPT买的openbrowser=browser.get(url)#导航到页面尝试:wait.until(EC.presence_of_element_located((By.ID,ID_stop)))除了:wait.until(EC.presence_of_element_located((By.ID,'rf footer'))浏览器。执行_脚本(“window.stop()”)
谢谢!!我尝试了第一个,得到了:AttributeError:“WebDriver”对象没有属性“presence\u of\u element\u located”
有什么办法解决它吗?我在手机上笨手笨脚的,笨手笨脚的(同样,现在祈祷:)。问题是presence\u of_element\u located()
是expected\u条件中的一个类,而不是webdriver对象的一个方法(lambda中的x
)。现在它发生了另一个异常。执行后:browser.execute_script(“return document.documentElement.outerHTML”)
我得到:selenium.common.exceptions.WebDriverException:Message:unknown error:unknown read属性'outerHTML'为null
当我试图获取HTML时,它似乎返回null。我想我得到了,我放置了time.sleep(x)
在运行最后一个脚本之前。