这是一个爱好项目,所以我可以更熟悉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()
如何按天数查找日历日,然后点击它?
答案 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;))点击();