Selenium、Python、findelement、Xpath方法无法定位或点击页面元素

0 投票
1 回答
42 浏览
提问于 2025-04-14 15:45

我在成功登录网站后,找不到页面上的一个元素。

我的目标是点击一个按钮,以便参与一个提议的活动。这个按钮只在午夜后出现,我不想一直坐在电脑前等待点击参与按钮。

使用下面的python脚本,我已经可以登录并连接到网站:

# find username field and send the username itself to the input field
browser.find_element("id", "login").send_keys(username)
# find password input field and insert password as well
browser.find_element("id", "motdepasse").send_keys(password)
# click login button
browser.find_element(By.CLASS_NAME, "submit").click()

新页面出现了,但我现在无法点击参与按钮。

这是页面的代码:

<li class="td" style="width:5%;">
    ul class="BtnsIco">
                    <li class="ajaxOpen user" data-url="_Programme_lstparticipants&amp;id=3593" title="Liste des participants" data-titre="Liste des participants"></li> <li class="bouton partAdd" data-url="_Programme_inscription&amp;id=3593" title="S'inscrire" data-titre="S'inscrire"></li> 
    </ul>
</li>

我尝试了几种方法来点击类名为 "bouton partAdd" 的按钮,但没有找到可以检测到这个按钮的XPATH方法,就像我在第一次登录页面时那样。

try:
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable(By.PARTIAL_LINK_TEXT, 'inscrire'))
    PartAdd_link = browser.find_element(By.PARTIAL_LINK_TEXT, 'inscrire')    
    print(PartAdd_Link)
except:
    print("Could not get PartAdd_Link")
    pass
try:
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable(By.CLASS_NAME, 'bouton partAdd'))
    content = browser.find_element(By.CLASS_NAME, 'bouton partAdd')
    print(content.CLASS_NAME)
except:
    print("Could not get Class_Name")
    pass

我的代码总是抛出异常。我尝试了其他方法,但都没有成功。我添加了WebdriverWait的安全措施,但对结果没有任何影响。

我在网页编程方面没有经验,所以如果有人能给我提供一些找到或理解问题的方法,我将非常感激。

提前谢谢你们!

1 个回答

0

如果你的需求是点击一个在午夜后出现的按钮,我的建议是使用Python中的datetime库。

from datetime import datetime
import time

def midnightChecker(day):
    while day+1 != datetime.now().day:
        time.sleep(5)
        print(f'{23-datetime.now().hour} hour {59-datetime.now().minute} minutes and {59-datetime.now().second} seconds left till midnight')
        continue
midnightChecker(datetime.now().day)

这个循环会在午夜时结束。你可以添加一个检查器。试着在这个时间后点击按钮,如果你仍然遇到错误,请分享一下你看到的错误信息。

在你的异常处理部分,也就是except:那一块,不要只写

except Exception as e:
       print(e)

这样可以打印出具体出现了什么异常。

撰写回答