使用Selenium(Python)在网页中选择活动日期

使用Selenium(Python)在网页中选择活动日期,python,html,selenium,web-scraping,datepicker,Python,Html,Selenium,Web Scraping,Datepicker,我正在尝试从这个网页获取数据 正如你所看到的,我需要选择一个开始和结束日期并获取数据。但问题是,当你打开日历时,你也可以看到非活动日,尤其是在最后一天 我为开始日期编写了一个代码,它工作得很好,但不实用 import re import time from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriv

我正在尝试从这个网页获取数据 正如你所看到的,我需要选择一个开始和结束日期并获取数据。但问题是,当你打开日历时,你也可以看到非活动日,尤其是在最后一天

我为开始日期编写了一个代码,它工作得很好,但不实用

import re
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
url = r'https://rapor.epias.com.tr/rapor/xhtml/ptfSmfListeleme.xhtml'

driver = webdriver.Chrome(r'...\chromedriver.exe')
driver.get(url)
link = driver.find_element_by_xpath('//*[@id="PmumBI:baslangicTarih"]/button/span[1]')
link.click()
while True:
    try:
        input_date = driver.find_element_by_xpath('//*[@id="ui-datepicker-div"]/table/tbody/tr[1]/td[1]/a')
        input_date.click()
    except:
        try:
            input_date = driver.find_element_by_xpath('//*[@id="ui-datepicker-div"]/table/tbody/tr[1]/td[2]/a')
            input_date.click()
        except:
            try:
                input_date = driver.find_element_by_xpath('//*[@id="ui-datepicker-div"]/table/tbody/tr[1]/td[3]/a')
                input_date.click()
            except:
                try:
                    input_date = driver.find_element_by_xpath('//*[@id="ui-datepicker-div"]/table/tbody/tr[1]/td[4]/a')
                    input_date.click()
                except:
                    try:
                        input_date = driver.find_element_by_xpath('//*[@id="ui-datepicker-div"]/table/tbody/tr[1]/td[5]/a')
                        input_date.click()
                    except:
                        try:
                            input_date = driver.find_element_by_xpath('//*[@id="ui-datepicker-div"]/table/tbody/tr[1]/td[6]/a')
                            input_date.click()
                        except:
                            try:
                                input_date = driver.find_element_by_xpath('//*[@id="ui-datepicker-div"]/table/tbody/tr[1]/td[7]/a')
                                input_date.click()
                            except:
                                break
但是如果我想在最后的日期使用相同的代码,我必须创建7个以上的try代码。有什么方法可以让这变得简单,比如在活动日期之间进行选择吗?

而不是:

while True:
您可以使用for循环,并在xpath表达式中使用索引:

for i in range(20):
    try:
        input_date = driver.find_element_by_xpath('//*[@id="ui-datepicker-div"]/table/tbody/tr[1]/td[' +str(i)+']/a')
        input_date.click()
        break
    except:
        pass
希望能有帮助

而不是:

while True:
您可以使用for循环,并在xpath表达式中使用索引:

for i in range(20):
    try:
        input_date = driver.find_element_by_xpath('//*[@id="ui-datepicker-div"]/table/tbody/tr[1]/td[' +str(i)+']/a')
        input_date.click()
        break
    except:
        pass

希望能有帮助

你能举一个不活动的开始日期和结束日期的例子吗?当我点击日历时,它们似乎都是可选的?另外,您是否有一系列需要查看的日期,或者您只需要站点中的随机数据?能否举例说明不活动的开始日期和结束日期?当我点击日历时,它们似乎都是可选的?另外,你有一系列你需要浏览的日期吗,还是你只需要网站上的随机数据?是的,非常感谢,不知何故我不能像这样思考['+str(I)+']是的,非常感谢,不知何故我不能像这样思考['+str(I)+']