代码之家  ›  专栏  ›  技术社区  ›  Denys

无法访问表单字段

  •  1
  • Denys  · 技术社区  · 6 年前

    我正在尝试使用凭据登录此页面: https://myibd.investors.com/secure/signin.aspx

    当我“检查”它时,我可以看到课堂的形式 gigya-login-form 但当我“查看来源”时,此表单不存在。我假设表单是通过JS(或类似的东西)加载的。我进行了研究,但没有一个解决方案有帮助。主要是人们建议等待页面加载

    等待元素加载30秒的代码

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.common.exceptions import TimeoutException
    
    url = 'https://myibd.investors.com/secure/signin.aspx'
    
    driver = webdriver.Chrome()
    driver.get(url)
    myElem = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CLASS_NAME, 'gigya-input-text')))
    

    退货 TimeoutException:消息: -这意味着该元素从未加载。

    有人能帮我填写表格并单击提交吗?非常感谢。

    UPD。 我还尝试进入iframe内部,但效果不太好:(下面的代码

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("signin-iframe"))
    
    username = driver.find_element_by_name("username")
    username.send_keys("my_user_name")
    

    它抛出 ElementNotVisibleException:消息:元素不可见 (我试着按照SO的想法让它可见,但没有成功)

    1 回复  |  直到 6 年前
        1
  •  1
  •   Andersson    6 年前

    表单位于iframe内部,因此为了能够处理输入字段,您需要切换到该iframe:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("signin-iframe"))
    username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//input[@aria-label="Email" and @placeholder="Email *"]')))
    username.send_keys("my_user_name")
    password = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//input[@aria-label="Password" and @placeholder="Password *"]')))
    password.send_keys("my_password")
    username.submit()