[英]Python Selenium Click on a title
我是 Python 新手,我正在尝试自动化预订。
例如,我想今天预订下周。
这是网站上的代码:
<a href="#" class="dp-item" data-moment="October 29 2020" title="Thursday, 29 October 2020" style="width: 113px;">
<div class="day row no-margin">
<div class="day-number col-xs-12">29</div>
</div>
<div class="day-week">Thursday</div>
<div class="month">October</div>
</a>
在我的代码下面:
我尝试指定一个日期,以检查它是否有效但没有运气:
driver.find_element_by_xpath("//a[@title='Thursday, 29 October 2020']").click()
最后我想要实现的是使用这样的变量:
today = datetime.datetime.now() nextweek = today + datetime.timedelta(days=7) driver.find_element_by_xpath("//a[@title='nextweek.strftime(%A %d %B %Y']").click()
我认为更好的方法是
driver.find_element_by_link_text('nextweek.strftime(%A %d %B %Y').click()
代码看起来像
today = datetime.datetime.now() nextweek = today + datetime.timedelta(days=7)
driver.find_element_by_link_text('nextweek.strftime(%A %d %B %Y').click()
它将找到“dp-item”类,我认为在这种情况下它更好(我没有测试此代码。如果您遇到任何错误,请告诉我)
在 Python 3.8 及更高版本中尝试 f-string,它是上帝发送的。 文档
import datetime
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# assuming you have `driver` here
# driver = ...
today = datetime.datetime.now()
nextweek = datetime.timedelta(weeks=1) + today
nextweek_formatted = nextweek.strftime("%B %d %Y")
xpath = f'//a[@data-moment="{nextweek_formatted}"]'
# now getting <a> tag
link = WebDriverWait(driver, 10).until(EC.element_to_be_clickable(By.XPATH, xpath))
link.click()
好的做法是使用WebDriverWait
来查找元素。
NoSuchElement
异常,即使加载元素只需要 1-2 秒)。EC.element_to_be_clickable
真正等待元素可点击,因为您需要稍后点击它。 另外,请执行try
except
,如果driver
找不到元素,则会引发TimeoutException
。 我没有在示例代码中实现它,但您可以尝试:)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.