Скрыть элементы, используя селен вебдрайвер в Python, выполнив JavaScript - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу скрыть элементы на элементе canvas, выполнив javascript in python.

Я попробовал ниже:

    def hide_elements():
        driver = LiveLibrary.get_webdriver_instance()

        js_script = '''\
        element1 = document.getElementsByClassName('someclass');
        element1[0].style.display = 'none';
        element2 = document.getElementsByClassName('another');
        element2[0].style.display = 'none';
        element3 = document.getElementsByClassName('highlight');
        element3[0].style.display = 'none';
        element4 = document.getElementsByClassName('overlay');
        element4[0].style.display = 'none';
        '''
        driver.execute_script(js_script)

Выше работает, но, как вы можете видеть, есть повторение кода.Есть ли способ, которым я могу упростить это вместо того, чтобы найти каждый элемент и скрыть их?

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

используйте следующий код:

js_script = '''\
document.getElementsByClassName('someclass')[0].setAttribute("hidden","");
document.getElementsByClassName('another')[0].setAttribute("hidden","");
document.getElementsByClassName('highlight')[0].setAttribute("hidden","");
document.getElementsByClassName('overlay')[0].setAttribute("hidden","");
 '''
driver.execute_script(js_script)
1 голос
/ 27 сентября 2019

Если только один из каждого класса - я использую ES <5, чтобы не сломать ваш веб-драйвер: </p>

var cls = ["someclass","another","highlight","overlay"];
for (var i=0;i<cls.length;i++) {
  document.querySelector("."+cls[i]).style.display = "none";
}

Это будет работать в браузере:

[...document.querySelectorAll("[class^=class]")].forEach(ele => ele.style.display = "none");

Для разных классов:

["someclass","another","highlight","overlay"]
  .forEach(cls => [...document.querySelectorAll("."+cls)]
  .forEach(ele => ele.style.display = "none"));

Для более старых версий JS:

["someclass","another","highlight","overlay"]
  .forEach(function(cls) { [...document.querySelectorAll("."+cls)]
  .forEach(function(ele) { ele.style.display = "none"})});

Еще старше:

var cls= ["someclass","another","highlight","overlay"];
for (var i=0;i<cls.length;i++) {
  var elements = document.querySelectorAll("."+cls[i]);
  for (var j=0;j<elements.length;j++) {
    elements[j].style.display = "none";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...