Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не могу заполнить поле (https://javascript.ru/forum/misc/83307-ne-mogu-zapolnit-pole.html)

noveek 14.11.2021 01:20

Не могу заполнить поле
 
Собственно никак не могу заполнить поле помогите пожалуйста
<div data-uia="pass-field+container" class="nfInput nfpassInput login-input login-input-pass"><div class="nfInputPlacement"><div class="nfpassControls"><label class="input_id"><input type="pass" data-uia="pass-field" name="pass" class="nfTextField hasText" id="id_pass" value="" tabindex="0" autocomplete="pass" dir="ltr"><label for="id_pass" class="placeLabel">pass</label></label><button data-uia="pass-visibility-toggle" id="id_pass_toggle" type="button" class="nfpassToggle" title="Show pass">SHOW</button></div></div></div>

document.querySelector("#id_pass").value="123456"
$("#id_pass").value="123456"
заполняют только по виду на деле нет ((((

Aetae 14.11.2021 01:27

https://javascript.ru/forum/misc/829...tml#post539563

noveek 14.11.2021 10:23

Цитата:

Сообщение от Aetae (Сообщение 541401)

Да я знаю пробовал это не сработало почему то

Aetae 14.11.2021 13:15

Значит гадать бессмысленно, нужно разбираться как работает конкретный код.
Ну или использовать инструменты автоматизации извне браузера, полностью имитирующие пользовательский ввод.

noveek 14.11.2021 13:57

Цитата:

Сообщение от Aetae (Сообщение 541413)
Значит гадать бессмысленно, нужно разбираться как работает конкретный код.
Ну или использовать инструменты автоматизации извне браузера, полностью имитирующие пользовательский ввод.

Вот здесь это:
https://www

Email запоняется нормально а вот с паролем беда и кликается нормально тоже

Aetae 14.11.2021 20:04

Там стоит проверка на isTrusted(параметр true только в событиях генерируемых самим браузером). Изнутри обычного браузера ты не сможешь сделать ничего.

Ну т.е. ты можешь подменить сам кусок кода с проверкой на свой, и пошли они нахрен, но это гораздо сложнее.)

Aetae 14.11.2021 21:05

Вот так должно работать:
function findLodashAndReplaceGet(registry) {
  for(const key in registry) {
    const module = registry[key]?.exports
    if(module && module._ && module._.VERSION === module.VERSION) {
      module.get = ((g) => (...args) => {
        if(args[1] === 'nativeEvent.isTrusted')
          return true

        return g(...args);
      })(module.get);
    }
  }
}

findLodashAndReplaceGet(C._registry);

function setValue(element, value, options) {
  if(typeof element === 'string') 
    element = document.querySelector(element);

  options = Object.assign({
    bubbles: true
  }, options);

  element.dispatchEvent(new Event('focus', options));
  element.dispatchEvent(new Event('keydown', options));
  element.dispatchEvent(new Event('keypress', options));
  
  element.value = value;
  
  element.dispatchEvent(new Event('input', options));
  element.dispatchEvent(new Event('keyup', options));
  element.dispatchEvent(new Event('change', options));
  element.dispatchEvent(new Event('blur', options));

  return element;
}


setValue('#id_password', 'New Value')

Функция findLodashAndReplaceGet должна выполняться один раз(но не критично). Она подменяет get в lodash таким образом что получение isTrusted всегда выдаёт true.
Спасибо им за то что потроха своего кода раскрывают в голобал, иначе было бы чутка по-сложнее.)

noveek 14.11.2021 22:44

Цитата:

Сообщение от Aetae (Сообщение 541426)
Вот так должно работать:
function findLodashAndReplaceGet(registry) {
  for(const key in registry) {
    const module = registry[key]?.exports
    if(module && module._ && module._.VERSION === module.VERSION) {
      module.get = ((g) => (...args) => {
        if(args[1] === 'nativeEvent.isTrusted')
          return true

        return g(...args);
      })(module.get);
    }
  }
}

findLodashAndReplaceGet(C._registry);

function setValue(element, value, options) {
  if(typeof element === 'string') 
    element = document.querySelector(element);

  options = Object.assign({
    bubbles: true
  }, options);

  element.dispatchEvent(new Event('focus', options));
  element.dispatchEvent(new Event('keydown', options));
  element.dispatchEvent(new Event('keypress', options));
  
  element.value = value;
  
  element.dispatchEvent(new Event('input', options));
  element.dispatchEvent(new Event('keyup', options));
  element.dispatchEvent(new Event('change', options));
  element.dispatchEvent(new Event('blur', options));

  return element;
}


setValue('#id_password', 'New Value')

Функция findLodashAndReplaceGet должна выполняться один раз(но не критично). Она подменяет get в lodash таким образом что получение isTrusted всегда выдаёт true.
Спасибо им за то что потроха своего кода раскрывают в голобал, иначе было бы чутка по-сложнее.)

Спасибо тебе добрый человек большой удачи тебе )


Часовой пояс GMT +3, время: 21:38.