无法在 pagespeed.web.dev 上使用 selenium 检测与另一个元素共享相同 CSS 选择器的元素

问题描述 投票:0回答:1

我在 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]"

python selenium-webdriver
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.