Необходимо деактивировать пользователей с Python и Selenium в базе данных на интерфейсной, но устаревшей ссылке - PullRequest
0 голосов
/ 01 апреля 2020

Итак, мне было поручено удалить группы безопасности из нескольких пользователей, которые неактивны в нашей базе данных на внешнем интерфейсе. Мне запрещено управление бэкэндом. Так что я автоматизирую его с помощью Selenium и Python. Мне было любопытно узнать о следующей трассировке стека, получаемой из моей процедуры:

  File ".\remove_sec_groups_inactive_users.py", line 127, in <module>
    element.send_keys(config['sec_group_removal']['target_user']['name_key']);
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webelement.py", line 477, in send_keys
    self._execute(Command.SEND_KEYS_TO_ELEMENT,
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=80.0.3987.149)

Проблема заключается в коде где-то в этой части.

# Load users.json File
with open('users.json','r') as f:
          config = json.load(f)

# Send Keys to Lookup
# XPATH = //*[@id='brSecuredUsersLookupInput']
target_user = browser.find_element_by_id("brSecuredUsersLookupInput")
element.send_keys(config['sec_group_removal']['target_user']['name_key']);
element.send_keys(Keys.RETURN);

Я хотел бы иметь возможность привлечь больше пользователей с файлом JSON для полезной нагрузки, но по какой-то странной причине это не нравится. Я думал об использовании

(config['sec_group_removal']['target_users']['user']['name_key'])

из файла, который выглядит следующим образом:

{
        "sec_group_removal": {
                "target_user": {
                         "user": {
                                "user_name": "firstname.lastname",
                                "name_key": "ABDLFNSDFKNE0033"
                          }
                }
        }
}

Увы, это тоже не работает, поэтому я использую следующее:

{
        "sec_group_removal": {
                "target_user": {
                                "user_name": "NNNNNNN",
                                "name_key": "######"
                }
        }
}

В любом случае мне не нужно отправлять нужные мне ключи в компонент l oop для поиска пользователя:

enter image description here

I нужна помощь с отправкой строки в этот поиск, ниже находится веб-элемент:

<input class="lookupInput" type="text" name="brSecuredUsersLookupInput" id="brSecuredUsersLookupInput" title="Last First, Name Key, SSN, Name ID, Login" style="width: 100px;" tabindex="1" onkeydown="return lookupKeyPressed(event,&quot;&quot;,&quot;ssusrbrws001.w&quot;)" origvalue="" det="true" aria-labelledby="" autocomplete="off">

1 Ответ

0 голосов
/ 02 апреля 2020

Проблема возникла с тем, как я вызывал общую переменную, которую я пытался выдать методом send_keys.

target_user = browser.find_element_by_id("brSecuredUsersLookupInput")
element.send_keys(config['sec_group_removal']['target_user']['name_key']);
element.send_keys(Keys.RETURN);

Это должно быть:

target_user = browser.find_element_by_id("brSecuredUsersLookupInput")
target_user.send_keys(config['sec_group_removal']['target_user']['name_key']);
target_user.send_keys(Keys.RETURN);
...