如何在 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 代理捕获网络流量?