python - 如何使用 Selenium 通过 Python 导航弹出式日历?

标签 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: 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/

相关文章:

Python - 抓取网页以获取仅在滚动后出现的信息

javascript - 在 Chrome 上运行 Node js Selenium 测试用例出现错误 Error : ECONNREFUSED connect ECONNREFUSED 127. 0.0.1:63528

python - Pandas :应用生成列表的操作不可调用

python - 将 .xlsx 文件与 Python 合并

python-3.x - 在python中生成特定大小(以MB为单位)的空白mp4视频

python - QLineEdit 设置标题大小写

java - 为什么控制台窗口仍然输出 'UnhandledAlertException'?

python - 检测 OCR 文本图像是否上下颠倒

python - 无法重新训练实例分割模型

python - Pandas合并两个excel中的数据