繁体   English   中英

如何让 find_elements_by_class_name 在 Python Selenium 中工作?

[英]How to get find_elements_by_class_name to work in Python Selenium?

from bs4 import BeautifulSoup
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

url = "https://www.staples.ca/products/959340-en-dr-pepper-355-ml-cans-12-pack"

s=Service('C:/Users/teddy/OneDrive/Desktop/chromedriver.exe')
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
options.add_argument('--headless')
driver = webdriver.Chrome(service=s)

driver.get(url)
get_elements = driver.find_elements_by_class_name()

我的 Python IDE (Pycharm) 显示 find_elements_by_class_name 像驱动程序一样被划掉。 find_elements_by_class_name 我认为这是因为它已被弃用,但这是我输入 driver.find 时它给我的唯一建议...

希望有人能够帮助我。

谢谢

请尝试使用find_elements(By.CLASS_NAME,..)并查看错误是否仍然存在。

from selenium.webdriver.common.by import By

driver.find_elements(By.CLASS_NAME, '//button')

来源: 文档

如果您使用的是 Selenium V3.0 系列,它同时支持

get_elements = driver.find_elements_by_class_name()

或等价物

get_elements = driver.find_elements(By.CLASS_NAME, "")

两者都应该工作。

此外,不完全确定您为什么面临这个问题。 请说明您的 Selenium、Python、驱动程序版本等。

使固定 :

您可以尝试,显式等待有这样的列表:

get_elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "")))

进口:

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

原因是您使用的是 Selenium 4。如果您查看源代码,您将在find_element_by_class_name (或任何其他find_element_by_*方法)下看到弃用警告

warnings.warn(
    "find_element_by_* commands are deprecated. Please use find_element() instead",
    DeprecationWarning,
    stacklevel=2,
)

我不知道为什么 PyCharm 没有建议它,但是find_element(by=By.CLASS_NAME, value=name)对你find_element(by=By.CLASS_NAME, value=name)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM