如何在 Python 上使用 Selenium 在日历中选择一天?

Posted

技术标签:

【中文标题】如何在 Python 上使用 Selenium 在日历中选择一天?【英文标题】:How to select a day in a calendar using Selenium on Python? 【发布时间】:2021-04-06 15:24:20 【问题描述】:

转到https://lonnie-poole-package-plan-v2.book.teeitup.com/ 并单击日期会将我带到日历。我可以一直选择月份和年份,但我不知道如何选择我想要的日期。我知道我应该找到每天都遵循的通用 xpath 模板,但我不知道如何找到它。任何帮助,将不胜感激。这是我的代码:

from selenium import webdriver
from config import keys
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from selenium.webdriver.support.select import Select

def order(k):
    chr_options = Options()
    chr_options.add_experimental_option("detach", True)
    driver = webdriver.Chrome('./chromedriver', options=chr_options)
    driver.get(k['website_url'])

    time.sleep(1)
    driver.find_element_by_xpath('//*.[@id="app"]/div/section/div/div/div/div[1]/div/div[2]/div/div/div[3]/div/div[2]/button').click()
    while True:
        text = driver.find_element_by_xpath('//*[@id="app-body"]/div[2]/div[2]/div[1]/div[2]/div[1]/div/p').get_attribute('innerText')
        if text == k["month_year"]:
            break
        else:
            driver.find_element_by_xpath('//*[@id="app-body"]/div[2]/div[2]/div[1]/div[2]/div[1]/button[2]/span[1]/span').click()

    #issue begins here: this is where I am trying to select a day
    driver.find_element_by_xpath('//*[@id="app-body"]/div[2]/div[2]/div[1]/div[3]/div/div[2]/div[5]/button/span[1][contains(text(),"20")]')
if __name__ == '__main__':
order(keys)

【问题讨论】:

为什么不直接去约会呢?我点了一天然后查看网址,看到https://lonnie-poole-package-plan-v2.book.teeitup.com/?date=2020-12-31 您希望点击按钮而不是跨度。找到所需的跨度后,您可以使用 /parent::button。 【参考方案1】:

这适用于查找日期按钮。

driver.find_elements_by_xpath('//button[@class="jss530 jss556 jss772"]')

【讨论】:

谢谢,但我如何使用它来获得我想要的那一天?【参考方案2】:

只需将按钮父级添加到带有角色文档的 div 中的日期文本跨度即可。

driver.get('https://lonnie-poole-package-plan-v2.book.teeitup.com/')
wait = WebDriverWait(driver, 10)
#issue begins here: this is where I am trying to select a day

wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div/div/div/section/div/div/div/div[1]/div/div[2]/div/div/div[3]/div/div[2]/button"))).click()
day = 31
try:
   wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@role='document']//span[text()='']/parent::button[@tabindex='0']".format(str(day))))).click()
except:
   print('Not valid date')

导入

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

【讨论】:

当我运行此代码时,它会打印出“无效日期”。 xpath 错了吗?

以上是关于如何在 Python 上使用 Selenium 在日历中选择一天?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 selenium python 在悬停的 highcharts 上抓取值?

如何在 Python 上使用 Selenium 在日历中选择一天?

如何在 Python 上使用 selenium webdriver 和 browsermob 代理捕获网络流量?

如何在 Windows XP 上使用 pip 安装 selenium 包?

如何使用 selenium、python 上传文件(图片)

如何在使用 Selenium 和 Python 调用函数之前等待特定 URL 加载