Python Selenium:返回空输出而不是实际的span文本
我想从这个网站的某个元素中获取文本“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')
检查元素的截图:-

实际输出:-

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