我正在尝试在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到达日期选择器页面时,它单击日期选择器。 但是,Selenium单击日期选择器无效! 日历未出现 ,并且未生成日历的HTML代码。

除非Selenium Firefox窗口位于前台,否则为什么不显示日期选择器日历?


最后说明:

  • 为什么选择m.enterprise.com而不是普通的enterprise.com? 移动版本似乎更易于使用。
  • 为什么使用Firefox而不是Chrome或Safari? 我没有真正的偏爱...如果有理由在其他浏览器中进行尝试,我很乐意尝试。
  • 在页面加载时,我使用了一种很死脑筋的暂停/睡眠方式: time.sleep() 我已经尝试了更复杂的替代方法,例如implicitlyWait() ,并且我愿意对此进行更多的研究。
  • 除了上述所有注释外,前景/背景窗口似乎是这里问题的症结所在。

  ask by solvingPuzzles translate from so

本文未有回复,本站智能推荐: