环境
Win10,Chrome
问题描述
学习这节课的时候,按照视频里的代码偶尔会无法修改12306的出发日期(隐式等待已设置),例如我想要2020-12-31,执行结果不报错但日期修改失败。
后来我尝试每次先点击到往返窗口再点回单程,则100%可以设置我想要的日期。
疑问:
1.为什么直接设置日期会不成功?
2.请问有没有更好的办法处理这种情况?
def test_12306(self):
self.driver.get('https://www.12306.cn/index/')
# 疑问:这里要点击一下往返再点回单程才能让js脚本100%执行成功,如果不这样操作,则有一定几率执行完成但日期仍然没被修改
self.driver.find_element(By.XPATH, '//div[@class="search-tab-hd"]//a[text()="往返"]').click()
self.driver.find_element(By.XPATH, '//div[@class="search-tab-hd"]//a[text()="单程"]').click()
# 获取出发日期控件的元素并移除readonly属性
# date=self.driver.find_element_by_id('train_date')
# self.driver.execute_script(
# "var a=arguments[0];a.readonly = false;a.value='2020-12-31'",date)
self.driver.execute_script(
"a=document.getElementById('train_date');a.removeAttribute('readonly')")
# 重新赋予元素新日期
self.driver.execute_script("a.value='2020-12-31'")
sleep(3) # for observe
print(self.driver.execute_script("return document.getElementById('train_date').value"))