使用 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
希望对您有所帮助!
我正在尝试从此网页获取数据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
希望对您有所帮助!