我在使用时遇到问题 (EC.presence_of_element_ located(By.class, ""))

Seo*_*ang 2 python selenium selenium-webdriver

我正在做 Python selenium 项目并且有一个问题

EC.presence_of_element_located
Run Code Online (Sandbox Code Playgroud)

看起来Python无法识别它。

这是我的代码:

service = Service("C:\\Users\\jjang\\.wdm\\drivers\\chromedriver\\win32\\96.0.4664.45\\chromedriver.exe")
browser = webdriver.Chrome(service=service)
browser.maximize_window()
browser.get("https://www.google.com")
actions = ActionChains(browser)
actions.send_keys(Keys.TAB * N)
actions.send_keys(Keys.ENTER)
actions.perform()
search_bar = browser.find_element(By.CLASS_NAME, "gLFyf")
search_bar.send_keys("hola")
search_bar.send_keys(Keys.ENTER)
unnecessary = WebDriverWait(browser, 5).until(EC.presence_of_element_located((By.CLASS_NAME,"VjDLd mnr-c g-blk")))
Run Code Online (Sandbox Code Playgroud)

Python 告诉我

NameError:名称“EC”未定义

为什么Python将ES识别为Name?有人可以帮助我吗?

cru*_*dey 5

为了使用EC,您需要导入这个

from selenium.webdriver.support import expected_conditions as EC
Run Code Online (Sandbox Code Playgroud)

这应该可以解决这个错误

NameError: name 'EC' is not defined
Run Code Online (Sandbox Code Playgroud)

另外,我看到您正在使用这样的类名VjDLd mnr-c g-blk

您将得到 NoSuchElement 异常。

请删除空格并改为 CSS 选择器,因为 Selenium 不支持类名空格。

所以而不是

unnecessary = WebDriverWait(browser, 5).until(EC.presence_of_element_located((By.CLASS_NAME,"VjDLd mnr-c g-blk")))
Run Code Online (Sandbox Code Playgroud)

用这个 :

unnecessary = WebDriverWait(browser, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR,".VjDLd.mnr-c.g-blk")))
Run Code Online (Sandbox Code Playgroud)

进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Run Code Online (Sandbox Code Playgroud)