为什么我找不到这个元素?

Why can't I locate this element?

我正计划在网络上从 NVIDIA 抓取 GPU 库存数据,但是当尝试通过单击“加载更多”按钮加载整个页面时,它显示 "selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".buy-link load-more-btn"}"

HTML 代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import  expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
import time

PATH = Service('C:\Program Files (x86)\chromedriver.exe')
driver = webdriver.Chrome(service=PATH)

driver.get("https://store.nvidia.com/en-gb/geforce/store/gpu/?page=1&limit=9&locale=en-gb&category=GPU&gpu=RTX%203090,RTX%203080%20Ti,RTX%203080,RTX%203070%20Ti,RTX%203070,RTX%203060%20Ti,RTX%203060,RTX%203050%20Ti,RTX%203050&gpu_filter=RTX%203090~30,RTX%203080%20Ti~19,RTX%203080~24,RTX%203070%20Ti~18,RTX%203070~22,RTX%203060%20Ti~19,RTX%203060~28,RTX%203050%20Ti~0,RTX%203050~0,RTX%202080%20Ti~1,RTX%202080%20SUPER~0,RTX%202080~0,RTX%202070%20SUPER~0,RTX%202070~0,RTX%202060%20SUPER~1,RTX%202060~8,GTX%201660%20Ti~3,GTX%201660%20SUPER~5,GTX%201660~5,GTX%201650%20SUPER~2,GTX%201650~19")

load = driver.find_element(By.CLASS_NAME, "buy-link load-more-btn")

load.click()

查找元素的调用在元素出现在页面上之前执行。看看等待超时documentation。这是文档中的示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

您也可以使用implicitly_wait,但使用此解决方案,您必须猜测加载需要多长时间

driver.implicitly_wait(20) # gives an implicit wait for 20 seconds