我正在尝试使用Python中的Selenium以编程方式检查 m.enterprise.com 上的租车价格。在此网站上,用户使用 jQuery Datepicker 1.8.14小部件选择租车的开始和结束日期。
此作品
这是一个包含jQuery Datepicker小部件的示例网站:http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/datePickerClickInput.html
这是Datepicker 1.5而不是Datepicker 1.8,但它应该作为玩具示例。
让我们尝试点击Selenium中的Datepicker小部件......
defaultSleep = 3 #seconds
driver = webdriver.Firefox()
url='http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/datePickerClickInput.html'
driver.get(url) # datepicker example
time.sleep(defaultSleep)
driver.find_element_by_id('date1').click() # THIS WORKS -- calendar appears.
以上示例正常运行。当我们使用Selenium点击一个datepicker元素时,日历会出现,并生成日历的HTML代码。无论Selenium驱动的Firefox窗口是在前台还是在后台,此示例都有效。
除非前景中的Selenium驱动窗口,否则这不起作用:
继续我们的玩具示例,让我们使用Selenium在m.enterprise.com上预订租车预订的前几个步骤。点击这些菜单时,企业似乎会关注上一页,因此按顺序(自动)点击汽车预订菜单非常重要。 (如果我们尝试跳过某些页面或出现故障,则Enterprise会出现“会话超时”错误。)
# PAGE 1: top-level page
driver.get('http://m.enterprise.com/index.html')
time.sleep(defaultSleep)
# PAGE 2: fill in location where you want to reserve your car
driver.get('https://m.enterprise.com/reserve-car.html?restart=true&cm_sp=Reserve%20a%20Car-_-Body-_-en')
time.sleep(defaultSleep)
element=driver.find_element_by_class_name('textInput') #place to type your Pick Up Location
element.send_keys("92093") #zip code or city/state
driver.find_element_by_class_name('buttonRight').click() # "Next" button
# PAGE 3: select location within search results /reserve-car.html
time.sleep(defaultSleep)
# by making no input here, we default to selecting the first rental location in the list
driver.find_element_by_class_name('buttonRight').click()
# PAGE 4: DO THE DATEPICKER. (choose time and date of car rental)
time.sleep(defaultSleep)
driver.find_element_by_id('datepickerPickup').click() #click on a datepicker
...('datepickerPickup').click()
行的结果好坏参半。在对行为做了一些记录之后,我把它归结为两个关键场景:
场景1。您已使用鼠标选择了Selenium驱动的Firefox窗口。你只是欣喜地看着Selenium运行浏览器。 datepicker / Selenium交互工作完美无缺。将显示日历,并生成日历的HTML代码。
场景2。您正在使用鼠标点击与Selenium作业无关的某些窗口。 Selenium驱动的Firefox窗口在后台,但您仍然可以看到Selenium正在点击菜单。当Selenium到达datepicker页面时,它会点击datepicker。但是,Selenium点击日期选择器没有任何效果! 日历不会显示,并且不会生成日历的HTML代码。
除非Selenium Firefox窗口位于前台,否则为什么不显示日期选择器日历?
最后的说明:
time.sleep()
。我尝试了更复杂的替代方案,例如implicitlyWait()
,我愿意更多地进行调查。