如何使用Selenium使用Python导航弹出日历?

时间:2015-05-27 18:12:41

标签: python python-3.x selenium selenium-webdriver

这是一个爱好项目,所以我可以更熟悉Selenium。

我有一份日期清单。我想获得每个日期的电影时间。我可以毫无问题地加载剧院网站和日历,但是当我选择特定日期时,我会被抓住。如何使用Selenium点击日历中的日期?

这是我到目前为止所拥有的。打开浏览器,加载页面,单击并打开日历:

from selenium import webdriver

browser = webdriver.Firefox()
url = "https://www.amctheatres.com/movie-theatres/los-angeles/amc-promenade-16"
browser.get(url)
browser.find_element_by_xpath(".//*[@id='showtime-date']").click()
browser.implicitly_wait(3)

到目前为止,我的三次尝试都没有奏效。

尝试1:当我尝试按文字找到链接时,我得到:

  

NoSuchElementException:消息:无法找到元素

elem = browser.find_element_by_link_text('28').click()                                                   

尝试2:
这个xpath找到元素和click方法有效,但我希望能够通过字符串文本选择一天

xpath = ".//*[@id='theatre-showtimes-202']/div/div[2]/div[1]/div/div/div[1]/table/tbody/tr[5]/td[5]"     
elem = browser.find_element_by_xpath(xpath).click()                                                      

尝试3:
通过xpath和text找到元素,但是click方法不做任何事情

xpath_by_text = '//td[contains(text(), "28")]'
elem = browser.find_element_by_xpath(xpath_by_text).click()

如何按天数查找日历日,然后点击它?

2 个答案:

答案 0 :(得分:1)

  

尝试1:当我尝试按文字找到链接时

这不起作用,因为“按链接文字”定位器仅搜索 a元素。您需要td元素。

  

尝试2 ...

正如您已经注意到的那样,这不是您想要做的。您需要通过文本找到元素

  

尝试3

这非常接近所需的结果,但是,正如您所看到的,有两个元素28文本。您正在找到第一个td(因为,根据package attribute definition“所有元素位置策略必须按照它们在当前文档中出现的顺序返回元素”)这是禁用的(这解释了为什么点击什么都不做)并且来自上个月。

相反,请按文字找到td元素,另外,在类属性值中跳过包含disabled的元素:

//td[. = "28" and not(contains(@class, "disabled"))]

Chrome控制台演示:

> $x('//td[. = "28"]')
[<td class=​"old disabled day">​28​</td>​, <td class=​"day">​28​</td>​]

> $x('//td[. = "28" and not(contains(@class, "disabled"))]')
[<td class=​"day">​28​</td>​]

答案 1 :(得分:-1)

您可以尝试此解决方案

WebDriver driver = new FirefoxDriver();
driver.get("https://www.amctheatres.com/movie-theatres/los-angeles/amc-promenade-16");
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

driver.findElement(By.xpath(&#34; HTML /体/格[3] / DIV [2] / DIV [1] / DIV / DIV / DIV / DIV [2] / DIV [1] / DIV /输入[1]&#34;))点击(); driver.findElement(By.xpath(&#34; HTML /体/格[3] / DIV [2] / DIV [1] / DIV / DIV / DIV / DIV [2] / DIV [1] / DIV /格/ DIV [1] /表/ tbody的/ TR [5] / TD [5]&#34;))点击();