繁体   English   中英

Python Selenium 点击标题

[英]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来查找元素。

  • 如果您正常找到它,页面可能没有足够的时间将元素加载到 DOM 中,可能会导致您出现错误问题( NoSuchElement异常,即使加载元素只需要 1-2 秒)。
  • 使用EC.element_to_be_clickable真正等待元素可点击,因为您需要稍后点击它。

另外,请执行try except ,如果driver找不到元素,则会引发TimeoutException 我没有在示例代码中实现它,但您可以尝试:)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM