首页 > 解决方案 > 使用 Selenium (python) 通过 id 或 xpath 定位按钮元素时遇到问题。元素似乎有多个 ID 名称

问题描述

我一直在尝试通过 ID、xpath、链接文本和部分链接文本来定位按钮,但每次都会出现“无法定位元素”错误。

元素的html如下:

<a href="https://s1.ebridge.com/ebridge/3.0/retrieve/search.aspx?search=new&amp;guid=14f2de4c-b37a-4632-a593-48d8aa12b468" id="aView" onclick="clickme(this,'retrieve')" target="main">Retrieve</a>

它所在的页面位于登录屏幕后面,我可以毫无问题地通过该页面。这是我从开始到错误的代码:

>>> from selenium import webdriver
>>> from selenium.webdriver.common.keys import Keys
>>> from bs4 import BeautifulSoup
>>> import re
>>> import pandas as pd
>>> import os
>>> url = "https://s1.ebridge.com/ebridge/3.0/default.aspx?1"
>>> driver = webdriver.Firefox(executable_path="/Applications/Postgres.app/Contents/Versions/11/bin/geckodriver")
>>> driver.implicitly_wait(30)
>>> driver.get(url)
>>> username = driver.find_element_by_name("tbUserName")
>>> username.clear()
>>> username.send_keys("public")
>>> password = driver.find_element_by_name("tbPassword")
>>> password.clear()
>>> password.send_keys("public")
>>> file_cabinet = driver.find_element_by_name("tbFileCabinet")
>>> file_cabinet.clear()
>>> file_cabinet.send_keys("PINCHD")
>>> file_cabinet.send_keys(Keys.RETURN)
>>> driver.implicitly_wait(30)
>>> retrieve = driver.find_element_by_id("retrieve").click()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 360, in find_element_by_id
return self.find_element(by=By.ID, value=id_)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
'value': value})['value']
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="retrieve"]

看起来该元素有两个不同的 ID,我都尝试过但都没有成功(即“retrieve”和“aView”)。

我还尝试通过部分链接文本('Retrieve')和 xpath(//*[@id="aView"]) 进行搜索,但没有成功。

任何建议表示赞赏。

登录页面后面的页面

红色圈出的元素,箭头指向html

标签: pythonselenium

解决方案


您为按钮使用了错误的 ID。它有“btnLogin”ID。使用该 ID 找到您的登录按钮。

附上截图供您参考。在此处输入图像描述


推荐阅读