提问者:小点点

如何在Selenium元素可用时立即访问,而不是等待整个页面加载


driver = webdriver.Chrome()
#driver.set_page_load_timeout(10)

driver.get("sitename.com")

driver.find_element_by_id("usernameId").send_keys("myusername")

设置页面加载时间被证明是适得其反的,因为页面加载甚至在元素实际加载之前就被杀死了!

目前,当我尝试登录一个站点时,find_element_by_id()等待完整的页面加载,然后获取元素。我读过隐式/显式等待与期望条件一起使用,但据我所知,它们用于等待元素在完整页面加载后(动态)出现。

有没有一种方法可以让我尽快找到一个元素(轮询足够好),因为它是可见的(而不等待完整的页面加载)?这样做会很棒,有些页面需要相当长的时间才能加载(大流量/低可用性/糟糕的互联网连接可能是原因)。我正在使用SeleniumPython,还有一个Chrome驱动程序。谢谢。


共2个答案

匿名用户

看看硒蟒蛇留档。

它有visibility_of_element_located。

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.ID,'someid')))

匿名用户

最佳做法是等待整个页面加载完毕,然后再采取任何进一步的操作。但是,如果您想在两者之间停止页面加载(或仅在指定时间内加载页面并继续),您可以在浏览器的配置文件设置中更改此设置。

在Firefox的情况下:

profile = webdriver.FirefoxProfile()
profile.set_preference("http.response.timeout", 10)
profile.set_preference("dom.max_script_run_time", 10)
driver = webdriver.Firefox(firefox_profile=profile)

希望有帮助,干杯。