Selenium webdriver 检索一个空列表

Selenium webdriver retrieves an empty list

我有这段代码:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options as FirefoxOptions
firefox_options = FirefoxOptions()
firefox_options.add_argument("--headless")
driver = webdriver.Firefox(executable_path = "../../bin/geckodriver", options = firefox_options)

driver.get('https://www.go2roues.com/shop/?category=7&puissance=null&brands=&batterieAmovible=false&connecte=false&livraison=false&capacite=false')

elems = driver.find_elements_by_class_name("pf_pg__product")

print(elems)

从脚本执行此代码时,我得到一个空列表:

[]

当使用相同的 python 二进制执行相同的代码时,从我的 Python 解释器中我得到一个非空的对象列表:

[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="37de724b-4b6d-634e-be5a-ac341a005380")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="d28dde48-858b-704d-ae32-f96c8e1f8448")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="adf7399e-437f-1e41-8c93-89a55e7f9b7d")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="6a5e1ba4-1ffd-2a48-8e32-26affb5ff27f")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="ebace849-3456-a145-8879-c7416ef0aaf3")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="db7ba515-91ad-1a42-9165-2839a815e54f")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="e1e4c457-90c5-bf4d-a7ef-e9bb718c8cf3")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="dbc64104-945f-6a48-b675-9c41fc6e018d")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="c30aaa20-d53e-694b-996f-96fbfdaf9b63")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="c702b3b5-edbe-2e4b-b348-c9af84e2e752")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="9d300c72-aeb8-7c44-abca-fd26b9bf80b5")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="031d6a78-4035-0647-ada8-26af216f323c")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="3b1b1667-8dcf-ac48-a846-6ad7aab42263")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="e7d61329-8477-7449-8ee9-cffa7879847d")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="5c6a312f-784a-7145-9563-7936e94ab55d")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="239f3ef9-64d1-a548-9b7f-2d773270a70c")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="c892f779-d99c-9e4e-97f4-bf72a15ee395")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="d5d9fe59-89d9-2a40-ba3f-74c085e31d22")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="08f103a6-6bd0-6841-b625-ae063b471beb")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="8aa46251-2a5d-5648-9044-c9940f79a245")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="da3cd602-88d9-ea41-b00d-f1a9f779a4fa")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="dd93f3c2-0369-2a42-9b50-78ba0c5b6bd6")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="8068f7da-509c-8a4f-9b8e-f260be982579")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="bf445291-d44d-7341-9a73-de5faa8da454")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="4885aaf0-f1db-354d-b6d5-3f376d254ea1")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="db66481c-210f-dc45-84ef-fefc938e5f4b")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="a7d4899a-3e6d-d744-8f42-496b1ef98b05")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="8a1c7a8b-2bd7-5e4f-b4a6-9c8b73341ef3")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="3e2b6d43-7571-eb44-898f-4ff57cf05ffc")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="10e6427c-5321-d74f-805c-2cb206e76e23")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="43492738-5926-474a-9d61-7832cc261786")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="78a8829b-4d58-1143-80e1-43fabd0fb857")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="4bc866f1-87ae-184c-a1f7-884d07da33df")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="f248744f-e7d3-734d-98aa-15e498a2189a")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="04e5a31d-1de2-0a4f-8875-090e4529fea4")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="a18d837a-6a6d-b645-81bc-236142b30a2e")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="9329bbc1-c5e7-e647-bdd9-2097ddf065bd")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="f24de1ee-7168-ca42-883f-59d7c110bc37")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="76f50a49-cb5b-1c4d-94a7-4610e43bd981")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="d8a37df2-cf8a-da45-bd24-6f2f5d1a50e7")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="1fcadcaa-1e69-2b45-ad73-0697b38f6b31")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="cf45ff9c-4e3d-4b40-a5c4-88237efaf368")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="2ed04309-1a75-ad42-88e8-c11456b5f232")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="68a60a61-2b5d-e048-8ad7-f7e5b852888d")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="ad3fdb6c-55d7-e94c-b702-5cf6fff30c12")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="8b8f89c6-5512-7140-b05c-76fb97cec394")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="4e9c61f3-e662-f945-9853-43caf57e3270")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="f5d01c4d-ba3e-7a45-8a58-8ad5af62ff41")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="db14e25f-5479-504c-956c-8672a965327d", element="0196f1d6-80d4-5844-a688-e80354597bc4")>]

我不知道问题出在哪里。感谢您的帮助

您在获取元素列表之前错过了延迟。
在访问所需的 Web 元素之前应完全加载它们。
使代码工作的最简单方法是简单地添加一些延迟:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options as FirefoxOptions
firefox_options = FirefoxOptions()
firefox_options.add_argument("--headless")
driver = webdriver.Firefox(executable_path = "../../bin/geckodriver", options = firefox_options)

driver.get('https://www.go2roues.com/shop/?category=7&puissance=null&brands=&batterieAmovible=false&connecte=false&livraison=false&capacite=false')

time.sleep(10)
elems = driver.find_elements_by_class_name("pf_pg__product")

print(elems)

为了让它变得更好,您应该使用如下所示的显式等待:

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
from selenium.webdriver.firefox.options import Options as FirefoxOptions
firefox_options = FirefoxOptions()
firefox_options.add_argument("--headless")
driver = webdriver.Firefox(executable_path = "../../bin/geckodriver", options = firefox_options)

wait = WebDriverWait(driver, 20)
driver.get('https://www.go2roues.com/shop/?category=7&puissance=null&brands=&batterieAmovible=false&connecte=false&livraison=false&capacite=false')

#wait for the foirst element matching the passed locator presence
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".pf_pg__product")))

#add a short delay to make all the elements loaded
time.sleep(0.6)

#get the elements list
elems = driver.find_elements_by_class_name("pf_pg__product")

print(elems)