我如何 select 使用 python 在带有硒的 DatePicker 中的日期

How can I select a date in a DatePicker with selenium using python

我想 select 这个 DatePicker 的日期 :

到目前为止,我只能select今天的日期。但我不知道如何 select 一个具体的日期。从这里我需要 select 昨天的约会。这是我到目前为止所做的:

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(chromedriver)
driver.get('https://www.ut.com.sv/reportes?p_auth=vUIS4sqn&p_p_id=MenuReportesEstadisticos_WAR_CompletePublicReports&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_MenuReportesEstadisticos_WAR_CompletePublicReports_reportName=25cargosdelsistema')

elm = driver.find_element_by_link_text('Cargos del Sistema')
driver.implicitly_wait(5)
elm.click()

#TIPO
drpmedicion=driver.find_element_by_id('tipo')
drpmed=Select(drpmedicion)
driver.implicitly_wait(2)

drpmed.select_by_visible_text('Indicativo')
driver.implicitly_wait(2)

#SALIDA
drpsalida=driver.find_element_by_id('outType')
drpsal=Select(drpsalida)
driver.implicitly_wait(2)
drpsal.select_by_visible_text('csv')

#FECHAS INICIO
date1=driver.find_element(By.NAME,'fecha_desde')
date1.click()
driver.implicitly_wait(2)
date1.click()
driver.implicitly_wait(2)

date2=driver.find_element(By.CLASS_NAME,'picker__button--today')
date2.click()

driver.implicitly_wait(5)

#FECHAS FIN
date3=driver.find_element(By.NAME,'fecha_hasta')
driver.implicitly_wait(2)
date3.click()
driver.implicitly_wait(2)
date3.click()

driver.implicitly_wait(5)

date4=driver.find_elements(By.CLASS_NAME,'picker__button--today')
date4[1].click()

driver.implicitly_wait(5)


#CLICK FINAL
btn=driver.find_element(By.XPATH, '//*[@id="portlet_FormularioReportesEstadisticos_WAR_CompletePublicReports"]/div/div/div/input')
btn.click()

您可以通过多种方式解决这个问题,最简单的方法是根据链接网站使用的属性 data-pick 获取元素:

<td role="presentation">
    <div class="picker__day picker__day--infocus" data-pick="1590966000000" role="gridcell">1</div>
</td>

该值是当天的纪元,以毫秒为单位,您可以这样获取(将其更改为您使用的任何日期格式)

import time
import datetime

selectedDate = "01/06/2020"
epoch = int(time.mktime(datetime.datetime.strptime(selectedDate, "%d/%m/%Y").timetuple()))*1000

将纪元值添加到您的选择器中,从那里获取父元素并单击它。

另一种点击它的方法是通过 Selenium 的 execute_script. include/js/pickadate/picker.js handles when you click on the date with an on('click'... event. You could invoke that by using a querySelector and then using the .click() 方法执行 'raw' Javascript。