python - 使用 Selenium 对隐藏元素进行数据输入(Python 2.7)- 元素不可见

标签 python selenium

我正在使用 Selenium 和 Python 2.7 编写一个脚本来登录我的银行帐户。从历史上看,它是有效的,但现在抛出 ElementNotVisibleException 异常。这是我的代码:

import time
import os 
import subprocess
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import ui

user_id = raw_input('Enter your account number')
password = raw_input('Enter your password')

driver = webdriver.Chrome()  # Optional argument, if not specified will search path.

def regular():

    site = driver.get('https://www.meridiancu.ca/');

    enter_user_id = driver.find_element_by_xpath('//*[@id="memberNo"]').send_keys(user_id)

regular()

这是我的错误信息:

Traceback (most recent call last):
  File "C:\Users\Desktop\Programming\Python Files\Monthly\Banking.py", line 50, in <module>
    regular()
  File "C:\Users\Desktop\Programming\Python Files\Monthly\Banking.py", line 19, in regular
    enter_user_id = driver.find_element_by_xpath('//*[@id="memberNo"]').send_keys(user_id)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 349, in send_keys
    'value': keys_to_typing(value)})
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 493, in _execute
    return self._parent.execute(command, params)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 256, 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)
ElementNotVisibleException: Message: element not visible**
  (Session info: chrome=63.0.3239.84)
  (Driver info: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT 10.0.16299 x86_64)

异常被抛出在 enter_user_id = driver.find_element_by_xpath('//*[@id="memberNo"]')

最佳答案

当您尝试将 成员(member)编号/用户 ID 字段与 xpath 识别为 //*[@id="memberNo"] ,此 xpathHTML 中的 5 元素完全匹配。所以我们需要构造一个唯一的cssxpath来唯一标识成员(member)编号/用户ID字段,如下所示:

  • xpath

    driver.find_element_by_xpath("//div[@class='homepage-banner-block-grx desktop']//input[@id='memberNo' and @type='text']").send_keys(user_id)
    
  • css_selector

    driver.find_elements_by_css_selector("div.homepage-banner-block-grx.desktop input#memberNo[type=text]").send_keys(user_id)  
    

注意:

  • 在构建 xpath 时,确保我们需要避免在 START TO JUMP CONTENT LINK 部分中使用字段 Member Number/User ID , mobile nav 部分和 mobile-buttons 类。

  • 我们还需要确保 xpath 识别text 字段而不是任何隐藏 字段。

    <
  • 最后,如果您在元素上调用 send_keys(user_id) 方法,它会返回 void

关于python - 使用 Selenium 对隐藏元素进行数据输入(Python 2.7)- 元素不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48178619/

相关文章:

python - 如何使用列名称旋转 pandas.dataframe

java - 如何查找多个标签的动态 xpath 以及 div 内的文本

类似页面部分的 Ruby PageObject 设计

java - Selenium Java : How to get current ChromeDriver instance's user directory and version using ChromeCapabilities

python - Python 的 set() 在 C 中是否有等价物?

python - 如何将 Python 升级到特定版本?

java - 如何在java中用selenium获取包裹在段落元素<p>中的文本的值

javascript - 为什么 Java 中的 'executeAsyncScript (window.setTimeout (5000))' 函数会在 5 秒后等待下一个函数执行?

python - tensorflow中fft的结果和numpy不一样

python - 在函数上定义@property