我在 https://pagespeed.web.dev 上使用带有 Python 的 Selenium WebDriver,以获得桌面的“First Contentful Paint”的值,该值仅在分析任何网站后出现。然而,该元素与“First Contentful Paint”的移动值共享相同的 CSS 选择器,我认为这会阻止 Selenium 检测该元素的桌面实例。我只能成功检测到移动元素。
“桌面”和“移动”是指您可以在网站本身上切换的 2 个不同选项卡。
桌面 CSS 选择器:
"#first-contentful-paint > div > div.lh-metric__value"
移动 CSS 选择器:
"#first-contentful-paint > div > div.lh-metric__value"
我也尝试过使用XPath来检测元素,但也没有成功。
桌面元素 XPATH:
"//*[@id="first-contentful-paint"]/div/div[2]"
移动元素 XPATH:
"//*[@id="first-contentful-paint"]/div/div[2]"
Selenium 不会与不可见的元素交互。您的定位器正在查找不可见的元素,并且我确信当您尝试拉动
.text
等时会抛出异常。
通过更改移动选项卡的定位器,只会修复该选项卡上的元素。您仍然需要单击“桌面”选项卡进行切换,然后从那里获取数据。
完整代码
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
url = 'https://pagespeed.web.dev'
driver = webdriver.Chrome()
driver.get(url)
driver.maximize_window()
test_url = "https://www.google.com/"
wait = WebDriverWait(driver, 10)
driver.find_element(By.ID, "i4").send_keys(test_url + "\n")
labels = ["Largest Contentful Paint (LCP)", "Interaction to Next Paint (INP)", "Cumulative Layout Shift (CLS)", "First Contentful Paint (FCP)", "First Input Delay (FID)", "Time to First Byte (TTFB)"]
mobile = "//div[@aria-labelledby='mobile_tab']"
desktop = "//div[@aria-labelledby='desktop_tab']"
print("MOBILE")
for label in labels:
value = wait.until(EC.visibility_of_element_located((By.XPATH, f"{mobile}//div[@class='PZeSbe'][.//a[text()='{label}']]//span[contains(@class,'Ykn2A')]"))).text
print(f"{label}: {value}")
driver.find_element(By.ID, "desktop_tab").click()
print()
print("DESKTOP")
for label in labels:
value = wait.until(EC.visibility_of_element_located((By.XPATH, f"{desktop}//div[@class='PZeSbe'][.//a[text()='{label}']]//span[contains(@class,'Ykn2A')]"))).text
print(f"{label}: {value}")
driver.quit()
然后打印出来
MOBILE
Largest Contentful Paint (LCP): 1.2 s
Interaction to Next Paint (INP): 249 ms
Cumulative Layout Shift (CLS): 0.04
First Contentful Paint (FCP): 1 s
First Input Delay (FID): 28 ms
Time to First Byte (TTFB): 0.5 s
DESKTOP
Largest Contentful Paint (LCP): 1.5 s
Interaction to Next Paint (INP): 104 ms
Cumulative Layout Shift (CLS): 0
First Contentful Paint (FCP): 1.4 s
First Input Delay (FID): 7 ms
Time to First Byte (TTFB): 1.1 s