【问题标题】:Selenium can't find element by class name which needs to be clickedSelenium 无法按类名找到需要单击的元素
【发布时间】:2023-01-06 22:12:12
【问题描述】:

在此页:

https://finance.yahoo.com/quote/AAPL/balance-sheet?p=AAPL

我想点击“全部折叠按钮”

这些是哪些类:

我已经以几种不同的方式尝试过这个,但看起来硒无法按下按钮。 mij代码可能有什么问题?

url = 'https://finance.yahoo.com/quote/AAPL/balance-sheet?p=AAPL'
driver.get(url)
#   driver.find_element(By.CSS_SELECTOR,'expandPf Fz(s) Bd(0) C($linkColor) C($linkActiveColor):h Fw(500) D(n)--print Fl(end) Mt(5px)')#.click()
#   driver.find_element(By.CLASS_NAME,'expandPf Fz(s) Bd(0) C($linkColor) C($linkActiveColor):h Fw(500) D(n)--print Fl(end) Mt(5px)')#.click()
#   driver.find_element(By.CLASS_NAME,'expandPf Fz(s)')#.click()
    showmore_link = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, 'expandPf Fz(s) Bd(0) C($linkColor) C($linkActiveColor):h Fw(500) D(n)--print Fl(end) Mt(5px)')))
    showmore_link.click()

我的选择似乎都不起作用。

【问题讨论】:

  • 尝试用点替换空格并在前面加上一个点:".expandPf.Fz(s).Bd(0)......"

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

首先这些expandPfFz(s)Bd(0)C($linkColor)C($linkActiveColor):hFw(500)D(n)--printFl(end)Mt(5px)和复杂的类名,而By.CLASS_NAME接收单身的类名值。要使用多个类名称值,您可以使用 XPath 或 CSS 选择器。
但最简单的方法是使用 XPath。
这个 XPath 有效://span[contains(text(),'Expand All')]
这是我使用的完整代码。它在关闭弹出窗口后扩展区域

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.add_argument("start-maximized")

webdriver_service = Service('C:webdriverschromedriver.exe')
driver = webdriver.Chrome(options=options, service=webdriver_service)
wait = WebDriverWait(driver, 10)

url = "https://finance.yahoo.com/quote/AAPL/balance-sheet?p=AAPL"
driver.get(url)

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[aria-label='Close']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(),'Expand All')]"))).click()

结果是:

【讨论】:

  • 是的,这有效。我用一个附加问题编辑了我的初始帖子以绕过第一个屏幕。有没有办法做到这一点?
  • 我也可以帮忙,但是。 1)你最初没有问过这个。 2) 每个问题应该是关于 1 个具体问题 3) 我需要链接/流程来获取该弹出窗口。因此,请接受这个答案,因为它解决了您最初的问题,并请为第二个问题打开一个新的附加问题。
  • 谢谢。但是,使用您的初始输入,我必须能够自己解决这个问题!。非常感谢你的帮助。
  • 非常好 !顺便说一句,如果答案有帮助,您也可以投票...
猜你喜欢
  • 2020-03-05
  • 1970-01-01
  • 2021-06-23
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多