gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:18:27 25 4
gpt4 key购买 nike

这是一个业余项目,因此我可以更熟悉 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com