селен ElementNotVisibleException в password_elem - PullRequest
0 голосов
/ 19 октября 2018

У меня есть код ниже, где я пытаюсь запустить Chrome, зайти на сайт и войти в систему.Это основано на коде, который я нашел в репозитории ниже:

https://github.com/AlbanyCompSci/aeries-api, в основном, это помогает мне войти в этот портал классов, называемый aeries, и вывести мои школьные оценки.Я получал ошибки, связанные с «фантомами».Также до того, как было выдано сообщение о том, что хром должен быть безголовым.Я получил помощь по этому вопросу в предыдущем посте: проблема phantomjs на mac с ноутбуком jupyter , в которой предлагалось использовать chromedriver вместо phantomjs.Теперь вместо загрузки модулей из репозитория, как это было в предыдущем посте, я использую фрагменты кода из репозитория и пытаюсь пройтись по ним и понять, как они работают.Я запускаю его на Mac в ноутбуке Jupyter с Python 3.6.Любые советы с благодарностью.Когда я запускаю приведенный ниже код, я получаю ошибку «ElementNotVisibleException», связанную с частью «password_elem.send_keys (password)» кода.Кто-нибудь знает, что может быть причиной этой проблемы, и можете ли вы предложить, как решить эту проблему?Я новичок в селене, поэтому любые советы приветствуются.

Код:

import pandas as pd
import numpy as np

import os

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

Options

options = Options()

chrome_options = Options() 
options.add_argument('headless') #downlod Chrome driver.exe 
driver = webdriver.Chrome(executable_path=os.path.abspath("chromedriver"), chrome_options=chrome_options)


#system
#JSON for language agnostic output
try:
    import simplejson as json
except ImportError:
    import json


# trying to recreate getGradebooks
# Gradebooks.getGradebooks(session)

#re allows for matching text with regular expressions (including through BeautifulSoup)
#dateutil.parser provies .parse() to convert plain text dates in a variety of formats into datetime objects
import re, dateutil.parser
#BeautifulSoup provide a model for the source HTML
from bs4 import BeautifulSoup

#The default address of the gradebook page for AUSDK12 Aeries
# Drew Gradebook page
ADDRESS = 'https://abip.fsusd.org/ParentPortal/GradebookSummary.aspx'


# recreate session = AeriesSession.Session(email, password)

#Webdriver is interface to the selected browser (PhantomJS)
from selenium import webdriver
#Ability to select values in HTML <select> tags
from selenium.webdriver.support import select
import time

#Base URL of the AUSDK12 Aeries system
BASE_URL=   'https://abip.fsusd.org/ParentPortal/'
#'https://abi.ausdk12.org/aeriesportal/'
#Name of the login page (relative to the base URL)
LOGIN_PAGE =    'LoginParent.aspx'
#<form> id, not currently used
#FORM_ID =      'form1'
#id for email <input>
EMAIL_ID =      'portalAccountUsername'
#id for password <input>
PASSWORD_ID =   'portalAccountPassword'
#id for login button
LOGIN_ID =      'LoginButton'


email=‘madeup@madeup.com’
password=‘madeup’


login_url = BASE_URL + LOGIN_PAGE
#driver = webdriver.PhantomJS(service_log_path='/dev/null')
driver.get(login_url)
email_elem = driver.find_element_by_id(EMAIL_ID)
email_elem.send_keys(email)
password_elem = driver.find_element_by_id(PASSWORD_ID)
password_elem.send_keys(password)
login_elem = driver.find_element_by_id(LOGIN_ID)
login_elem.click()

Ошибка:

---------------------------------------------------------------------------
ElementNotVisibleException                Traceback (most recent call last)
<ipython-input-13-b6872465bdd4> in <module>()
      6 email_elem.send_keys(email)
      7 password_elem = driver.find_element_by_id(PASSWORD_ID)
----> 8 password_elem.send_keys(password)
      9 login_elem = driver.find_element_by_id(LOGIN_ID)
     10 login_elem.click()

~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py in send_keys(self, *value)
    477         self._execute(Command.SEND_KEYS_TO_ELEMENT,
    478                       {'text': "".join(keys_to_typing(value)),
--> 479                        'value': keys_to_typing(value)})
    480 
    481     # RenderedWebElement Items

~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py in _execute(self, command, params)
    626             params = {}
    627         params['id'] = self._id
--> 628         return self._parent.execute(command, params)
    629 
    630     def find_element(self, by=By.ID, value=None):

~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params)
    318         response = self.command_executor.execute(driver_command, params)
    319         if response:
--> 320             self.error_handler.check_response(response)
    321             response['value'] = self._unwrap_value(
    322                 response.get('value', None))

~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

ElementNotVisibleException: Message: element not interactable
  (Session info: chrome=69.0.3497.100)
  (Driver info: chromedriver=2.42.591059 (a3d9684d10d61aa0c45f6723b327283be1ebaad8),platform=Mac OS X 10.12.6 x86_64)

1 Ответ

0 голосов
/ 19 октября 2018

Вам не хватает следующей кнопки после ввода электронного письма.

email_elem = driver.find_element_by_id(EMAIL_ID)
email_elem.send_keys(email)

driver.find_element_by_id('next').click() // you are missing this

password_elem = driver.find_element_by_id(PASSWORD_ID)
password_elem.send_keys(password)
login_elem = driver.find_element_by_id(LOGIN_ID)
login_elem.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...