【发布时间】:2021-09-22 21:32:34
【问题描述】:
我只想执行一个简单的点击操作。当我启动 webdriver 时,登录页面会出现,我可以通过元素名称找到并传递我的凭据并按 Enter 键,没有任何问题。
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.webdriver import WebDriver
from selenium.webdriver.remote.webelement import WebElement
driver = webdriver.Firefox(executable_path=r"C:\arcgispro-py3-clone2\Lib\site-packages\selenium\webdriver\firefox\geckodriver.exe")
driver.get("http://server.domain:9999/landing_logon_page)
print(driver.title) # Title of the page
element_userid = driver.find_element_by_name("userid").send_keys("myusername")
element_pwd = driver.find_element_by_name("pwd").send_keys("mypassword")
element_SignIn = driver.find_element_by_name("Submit").click()
# WORKS FINE UP TO HERE
time.sleep(20)
Element = driver.find_element_by_xpath('//*[@id="SM_PF_WRK_SM_PF_SUBACTION"]').click()
无论我在最后一行使用哪种定位方法都不起作用。这包括元素名称、id、css 选择器和 xpath。
这是 div 中的 HTML,其中包含所需元素的输入类型:
<div id="win1divSM_PF_WRK_SM_PF_SUBACTION">
<input type="radio" name="SM_PF_WRK_SM_PF_SUBACTION" id="SM_PF_WRK_SM_PF_SUBACTION" class="PSRADIOBUTTON" tabindex="285" value="NEW" checked="checked" onclick="setupTimeout2();addchg_win1(this);submitAction_win1(this.form,this.id);">
<label for="SM_PF_WRK_SM_PF_SUBACTION" id="SM_PF_WRK_SM_PF_SUBACTION_LBL" class="PSRADIOBUTTON">New Employee</label>
</div>
这是我收到的错误:
Traceback (most recent call last):
File "<string>", line 22, in <module>
File "C:\arcgispro-py3-clone2\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\arcgispro-py3-clone2\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\arcgispro-py3-clone2\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\arcgispro-py3-clone2\lib\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="SM_PF_WRK_SM_PF_SUBACTION"]
也试过包含:
driver.find_element_by_xpath('//*[contains(@id,"SM_PF_WRK_SM_PF_SUBACTION") and contains(@class, "PSRADIOBUTTON")]').click()
得到了这个错误:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\arcgispro-py3-clone2\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\arcgispro-py3-clone2\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\arcgispro-py3-clone2\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\arcgispro-py3-clone2\lib\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: //*[contains(@id,"SM_PF_WRK_SM_PF_SUBACTION") and contains(@class, "PSRADIOBUTTON")]
关于单击此按钮我需要做什么的任何想法?
【问题讨论】:
-
请添加返回的错误。
-
你能分享到那个页面的链接,或者至少是从正文到那个元素的所有 HTML 代码吗?此外,可能元素属性正在动态变化。
-
@Jortega 抱歉。添加了错误信息
-
@Prophet HTML 代码非常广泛,所以我只发送了包含元素的 div。链接受防火墙保护,因此对您没有任何好处。
-
我明白了。你确定那里没有 iframe 吗?另外,尝试跟踪该元素的属性值。可能在选择元素等时它们会发生变化。
标签: python-3.x selenium firefox