这是一个业余项目,因此我可以更熟悉 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: Message: Unable to locate element
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 和文本找到元素是有效的,但是 click 方法没有做任何事情
xpath_by_text = '//td[contains(text(), "28")]'
elem = browser.find_element_by_xpath(xpath_by_text).click()
如何通过天数找到日历日然后单击它?
最佳答案
Attempt 1: When I try to find the link by text
这不起作用,因为“通过链接文本”定位器仅搜索 a
元素。您需要一个 td
元素。
Attempt 2 ...
正如您已经注意到的,这不是您想要做的。您需要通过文本定位元素。
Attempt 3
这非常接近期望的结果,但是,如您所见,有两个元素带有 28
文本。您正在寻找第一个 td
(因为,根据 WebDriver specification:“所有元素位置策略必须按照它们在当前文档中出现的顺序返回元素” ) 被禁用(这解释了为什么点击什么都不做)并且来自上个月。
相反,通过文本定位 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>]
关于python - 如何使用 Selenium 通过 Python 导航弹出式日历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30490113/