python - 无法使用 Selenium Python 在模态对话框中单击文本字段
问题描述
我正在尝试单击并选择用户名和密码字段上的值,但它的“模态对话框”让我无法做到。在此 URL 打开并成功运行后立即出现模态。
我正在使用以下代码:
import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
driver.get('https://app.staging.showcare.io/product-showcase')
wait = WebDriverWait(driver, 20)
wait.until(EC.title_contains("Signin"))
print('sign in')
print('wait')
userName_field = driver.find_element_by_name('username')
time.sleep(6)
userName_field.click()
userName_field.send_keys('')
driver.quit()
我知道我正在使用 time.sleep,这不是最佳实践,但我正在尝试花时间。我也用过等到点击,它不起作用。现在,它抛出的异常是这样的:
Traceback (most recent call last):
File "/Users/tp/Documents/Pract/ShowCase_Automation/exhibitorAccess.py", line 19, in <module>
userName_field.click()
File "/Users/tp/Documents/Pract/ShowCase_Automation/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "/Users/tp/Documents/Pract/ShowCase_Automation/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "/Users/tp/Documents/Pract/ShowCase_Automation/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/Users/tp/Documents/Pract/ShowCase_Automation/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: chrome=93.0.4577.82)
有人可以帮我吗?
解决方案
该页面上有 2 个元素匹配find_element_by_name('username')
。
要访问正确的元素,您应该更改定位器。
改用这个:
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
driver.get('https://app.staging.showcare.io/product-showcase')
wait = WebDriverWait(driver, 20)
wait.until(EC.title_contains("Signin"))
print('sign in')
print('wait')
userName_field = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@class,'modal-content') and(contains(@class,'visible-lg'))]//input[@name='username']")))
userName_field.click()
userName_field.send_keys('')
time.sleep(6)
推荐阅读
- php - 在 mysql DB 中插入复选框值
- python - 确定文件相对于目录的路径,包括符号链接
- javascript - 在没有源代码或构建过程的 Electron 应用程序的生产构建中打开 Chromium DevTools
- ios - 如何在 Swift 中更改视频视图的大小
- google-apps-script - 如何将行移动到命名范围的最后一行(onEdit)
- java - # 在 XML 命名空间中似乎导致 java API 中的异常——为什么?
- optimization - 如何在 CPLEX ILOG 上创建的模型中实现本地搜索算法?
- gmp - 为什么我不能将这个科学记数法读入 GMP mpf_t?
- ios - iOS Swift 代码 - 当我有断点时才工作
- node.js - 如何通过填充字段在猫鼬中查找文档?