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

Pick Active Date in a Web Page with Selenium (Python)

我正在尝试从此网页获取数据https://rapor.epias.com.tr/rapor/xhtml/ptfSmfListeleme.xhtml 如您所见,我需要选择开始日期和结束日期并获取数据。但问题是当你打开日历时,你也可以看到非活动日,尤其是在最后一天。

我写了一个开始日期的代码,效果很好,但不实用。

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 个尝试代码。有没有什么办法可以让这个变得简单,比如在活动日期之间进行选择?

而不是:

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

希望对您有所帮助!