0

我试图单击带有库 Selenium 的标签 div 中的属性类容器。这是代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('https://www.flashscore.com/')

driver.find_element(By.CSS_SELECTOR, ".header__button header__button--search").click()

这是错误显示:

>>> driver.find_element(By.CSS_SELECTOR, ".header__button header__button--search").click();
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\avis\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py",

第 976 行,在 find_element 返回 self.execute(Command.FIND_ELEMENT, { File "C:\Users\avis\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver. py”,第 321 行,在执行 self.error_handler.check_response(response) 文件“C:\Users\avis\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler .py",第 242 行,在 check_response 中引发 exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: 消息:没有这样的元素:无法找到元素:{"method":"css selector","selector" :".header__button header__button--search"} (会话信息: chrome=85.0.4183.102)

该代码的灵感来自 selenium 文档:https ://www.selenium.dev/documentation/en/getting_started_with_webdriver/performing_actions_on_the_aut/

我做了一些研究并找到了一个可以克服异常的功能,element_to_be_clickable() 它是:根据文档,它用于在元素显示和可点击时等待。我用它这样:

> > element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "header__button
> header__button--search"))
>     element.click();

但是这个语法错误显示在控制台中:

文件“”,第 2 行 element.click() ^ SyntaxError: invalid syntax

虽然我没有看到语法错误。从哪里可以产生错误?并且功能使用好?

4

1 回答 1

0

在 HTML 中,您可以使用空格指定多个类:

<span class="class1 class2">....</span>

在 selenium 中,搜索单个类时,只需使用其中一个类名:

driver.find_element(By.CSS_SELECTOR, ".class1")

这将代码将使用 Selenium 打开站点并单击“搜索”按钮:

from webdriver_manager.chrome import ChromeDriverManager
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 import webdriver

# prevent version errors and plugin warning, may not be needed for you
options = webdriver.ChromeOptions()
options.add_argument("disable-extensions")
options.add_argument("disable-plugins")
options.experimental_options["useAutomationExtension"] = False  # prevent load error - Error Loading Extension - Failed to load extension from ... - Could not load extension from ... Loading of unpacked extensions is disabled
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)

# main code
driver.get('https://www.flashscore.com/')

element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".header__button--search")))

driver.find_element(By.CSS_SELECTOR, ".header__button--search").click()

要使用多个类查找元素,请查看这篇文章: Find div element by multiple class names?

于 2020-09-17T00:03:18.827 回答