【问题标题】:Selenium finding hidden element硒寻找隐藏元素
【发布时间】:2017-11-25 23:01:28
【问题描述】:

我无法访问www.meridiancu.ca 中的下拉菜单。这是主页右侧“选择银行类型”下的那个。一旦我运行我的代码。

from selenium import webdriver
from selenium.webdriver.common import action_chains, keys
import time


driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.meridiancu.ca")

bank_type = driver.find_element_by_id('SelectAccount')
bank_type.click()

我得到以下输出,但我不确定如何找到这个“隐藏”元素。

DevTools listening on ws://127.0.0.1:12015/devtools/browser/6f5fba77-4c41-49b9-93a3-64a8363cd35b
Traceback (most recent call last):
  File "C:\Users\Imad\Documents\Programming\Python\dropdown select.py", line 14, in <module>
    bank_type.click()
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 501, in _execute
    return self._parent.execute(command, params)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 308, in execute
    self.error_handler.check_response(response)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
  (Session info: chrome=62.0.3202.94)
  (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.16299 x86_64)

任何建议或解决方案将不胜感激。

【问题讨论】:

  • 我的回答有帮助吗?如果是,请在我的答案附近打勾。

标签: python google-chrome selenium webdriver


【解决方案1】:

以下代码用于处理选择标签:

from selenium.webdriver.support import ui


ui.Select(driver.find_element_by_css_selector(".sign-in-panel.sign-in-banner #SelectAccount")).select_by_visible_text("Small Business Banking")

结果:应从下拉列表中选择“Small Business Banking”选项。

希望对你有帮助!

【讨论】:

  • 非常感谢,拉特米尔!这实际上有很大帮助。我将使用这个和 Richard 的答案作为未来问题的参考。
  • @ImadKalboneh,如果有帮助,请在我的答案附近打勾。
  • 抱歉回复晚了。我刚开始使用我的帐户,但现在已经完成了 :) 一切顺利
  • @ImadKalboneh,好的,请在我的答案附近打勾。
【解决方案2】:

您遇到的问题是您的选择器正在查找 2 个匹配的元素。第一个匹配的元素被隐藏。移动浏览器查看页面时会显示隐藏元素。

我做了一些调查,发现下面的 CSS 选择器会找到你要找的元素。

bank_type = find_element_by_css_selector('.show-for-large select#SelectAccount.banking-target')

【讨论】:

  • 非常感谢,理查德!它实际上确实有很大帮助!我知道该选项存在,但从不知道如何实际使用它。我将使用这个和 Ratmir Asanov 的答案以供将来参考:)
【解决方案3】:

您还可以使用以下代码 sn-p 对下拉列表中的所有选项进行迭代。

el = driver.find_element_by_id('SelectAccount')
for option in el.find_elements_by_tag_name('option'):
    if option.text == 'Personal Banking':
        option.click() # select() in earlier versions of webdriver
        break

【讨论】:

  • 我之前尝试过,不幸的是,这导致了同样的错误。我现在明白了,谢谢:)
猜你喜欢
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多