我有一个基本的python脚本来测试网站页面速度。基本上它加载页面,检查元素是否可见,然后记录这两个事件之间的时间。
我用它来检查元素是否可见:
def wait_for_visibility(selector, timeout_seconds=10):
retries = timeout_seconds
while retries:
try:
element = browser.find_element_by_css_selector(selector)
if element is not None:
return element
except:
if retries <= 0:
raise
else:
pass
retries = retries - 1
raise Exception(
"Element %s not visible despite waiting for %s seconds" % (
selector, timeout_seconds)
)
我使用这个命令:
test_times['page_pre_' + name] = time.time()
browser.get(base + path)
wait_for_visibility(selector=selector_dict[page], timeout_seconds=240)
test_times['page_post_' + name] = time.time()
我的问题是find_element_by_css_selector似乎没有完成&amp;返回到页面之后的几秒钟(更具体地说是它应该查找的元素)已经完成加载。这真的会降低我的剧本作为最快速度的效率。
有问题的页面非常大并且是使用Vue组件构建的,如果这是它导致问题的原因那么我有没有其他方法可以查找具有selenium的特定页面加载事件?
答案 0 :(得分:0)
我设法解决了这个问题,检查了之前没有加载的元素,而没有使用我自己的循环但是使用了expected_conditions,这是我使用的代码
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
...
try:
element_present = EC.presence_of_element_located((By.CSS_SELECTOR, string))
WebDriverWait(driver, timeout).until(element_present)
return driver.find_elements_by_css_selector(string)
except TimeoutException:
print "Timed out waiting for page to load"
driver.quit()
基本上,您指定以秒为单位的超时,expected_conditions将使WebDriver等待,直到满足预期条件或时间结束。在我的情况下,这比我自己的等待元素功能更快,它可能加快你的脚本