为什么通过XPATH查找元素在遍历日期选择器时会给出太多的web元素?

2024-05-06 04:08:12 发布

您现在位置:Python中文网/ 问答频道 /正文

Blockquote

我正在做一个项目,我需要从一个显示一天数据的图表中提取数据。例如:我想获取2017年的所有数据,因此我必须在日期选择器中输入365次新日期。问题是,尽管我的XPATH调用非常具体,但脚本找到了许多WebElement的方法。其中许多甚至不符合XPATH中的限制。这只会在循环中发生,脚本会在每个循环中找到越来越多的web元素

我正在使用的代码:

Date_vec = pd.date_range(start="2017-01-01",end="2021-2-28") DatePicker = web.find_element_by_xpath('/html/body/form/table/tbody/tr/td/table/tbody/tr/td[2]/div/div[1]/div[2]/div[2]/div[2]/div/div[2]/div/table/tbody/tr[2]/td/table/tbody/tr/td[2]/span/input') month_prev = 0 year_prev = 0 for i in Date_vec: DatePicker = web.find_element_by_xpath('/html/body/form/table/tbody/tr/td/table/tbody/tr/td[2]/div/div[1]/div[2]/div[2]/div[2]/div/div[2]/div/table/tbody/tr[2]/td/table/tbody/tr/td[2]/span/input') DatePicker.click() if i.year != year_prev: # Year_button = web.find_element(By.XPATH,"//span[@onclick = 'basicDatePicker.ehYearSelectorClick(this)']") Year_button = web.find_elements(By.XPATH,".//span[@onclick = 'basicDatePicker.ehYearSelectorClick(this)']") Year_button[-1].click() Year_choice = web.find_elements(By.XPATH,"//a[normalize-space(text()) ='"+ str(i.year) + "']") Year_choice[-1].click() elif i.month != month_prev: Month_button = web.find_elements(By.XPATH,"//span[@onclick = 'basicDatePicker.ehMonthSelectorClick(this)']") Month_button[-1].click() Month_choice = web.find_elements_by_class_name('bdpMonthItem') Month_choice[i.month-1].click() Day_button = web.find_elements(By.XPATH,"//a[normalize-space(text()) ='"+ str(i.day) + "' and contains(@class, 'bdpDay')]") Day_button[-1].click() time.sleep(3) month_prev = i.month year_prev = i.year

例如,问题出现在以下行:

Day_button = web.find_elements(By.XPATH,"//a[normalize-space(text()) ='"+ str(i.day)  + "' and contains(@class, 'bdpDay')]")

此行返回4个元素,其中2个元素中没有任何文本。我用下面的行检查了这个

test1 = [i.text for i in Day_button]

所以我的问题基本上是:为什么行代码返回4个元素,其中两个没有文本,而我显式地告诉它将当前日期作为文本。感谢您的帮助

编辑:为了清晰起见,我添加了一个来自相关日期选择器的剪报: snip from the datepicker


Tags: divwebbytablebuttonelementsfindyear