Python Selenium:返回空输出而不是实际的span文本

0 投票
1 回答
55 浏览
提问于 2025-04-13 01:48

我想从这个网站的某个元素中获取文本“March”:https://www.greateranglia.co.uk/

第一步:点击日历图标

我的目的是:当日历出现后,我想提取月份的文本。

第二步:当我右键点击这个元素并获取选择器代码时,我得到了以下内容:

#dp1711106126734 > div > div.ui-datepicker-group.ui-datepicker-group-first > div > div > span.ui-datepicker-month

我收到的输出是:系统无法找到这个元素

def get_month(self, element):
        WebDriverWait(self.driver, 10)
        left_month = self.driver.find_element(By.CSS_SELECTOR, element)
        return left_month.text
get_month('#dp1711106126734 > div > div.ui-datepicker-group.ui-datepicker-group-first > div > div > span.ui-datepicker-month')

检查元素的截图:-

enter image description here

实际输出:-

enter image description here

1 个回答

1

如果你对使用 CSS_SELECTOR 这种方法没有特别的要求,可以试试下面的 XPATH 定位方法。

你可以尝试下面这个 XPath 表达式:

(//span[@class='ui-datepicker-month'])[3]

解释:

  • (//span[@class='ui-datepicker-month'])[3] 这个表达式的意思是选择 HTML 文档中第三个类名为 ui-datepicker-month<span> 元素。

把下面的代码改成:

left_month = self.driver.find_element(By.CSS_SELECTOR, element)

改成:

left_month = self.driver.find_element(By.XPATH, "(//span[@class='ui-datepicker-month'])[3]")

更新:

这里有完整的可运行代码,并附有逐行解释:

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
import time

driver = webdriver.Chrome()
driver.maximize_window()
wait = WebDriverWait(driver, 10)
driver.get("https://www.greateranglia.co.uk/")

# Click on Allow all cookies button
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Allow all cookies']"))).click()

# Click on Enter origin station text box
wait.until(EC.element_to_be_clickable((By.ID, "from-buytlbf"))).click()

# Click on calendar icon
wait.until(EC.element_to_be_clickable((By.XPATH, "(//a[@class='dpg-btn p-0'])[1]"))).click()

# Locate left month and print it
left_month = wait.until(EC.visibility_of_element_located((By.XPATH, "(//span[@class='ui-datepicker-month'])[3]")))
print(left_month.text)

# To click on date (23rd) in the left calendar
wait.until(EC.element_to_be_clickable((By.XPATH, "(//a[text()='23'])[3]"))).click()
time.sleep(20)

控制台结果:

March

Process finished with exit code 0

撰写回答