Вы видели, как я был слишком ленив, чтобы щелкнуть кнопки в профиле Salesforce Salesforce с Python и Selenium: посмотрите, как я делаю это снова, выключая опыт молнии во всех моих пользовательских профилях.
(И посмотрите, как меня избегают сообщества Salesforce за то, что он облегчил стерилизацию. а Зима 20 выпуска, которая переворачивается на Lightning Opere на ?)
Фон
Там, где я работаю, мы собираемся развернуть опыт Lightning для наших пользователей по набору разрешений, а не по профилю.
У нас нет никаких профилей, поэтому мы хотим убедиться, что они видели ничего О опыте молнии, когда это продолжается.
(Наша служба поддержки уже получила звонки от запутанных конечных пользователей, когда наша песочница тестирования спросила людей, хотят ли они попробовать Lightning после обновления в эти выходные.)
Задание
Я хочу рассказать о всех своих профилях, которые я могу найти в Salesforce по адресу https://myurl.com/00e
, проверьте, есть ли редактируемый Системная разрешение называется « Пользователь Lightning Experience », и убедитесь, что он не проверяется.
При настройке это находится под профилями, в области «разрешения системы» страницы конфигурации данного профиля.
Оказывается, что редактируемые версии этой страницы для каждого профиля доступны по адресу:
https://MyURL.com/00eSOMETHING/e?s=SystemPermissions
… Где 00ESOMENTE
Идентификатор профиля (который может быть раскрыт в профиле по профилевым ссылкам в https://myurl.com/00e
Возьми тебя, достаточно легко) Анкет
Код
Как и прежде, я собираюсь «схватить на экране» веб-страницы Salesforce и «захватить» свой собственный браузер, чтобы спасти себя несколькими кликами.
- Да, конечно, это мне потребовалось больше времени, чтобы код чем нажимать вручную.
- Тем не менее, теперь я могу повторно использовать свой код против любой организации.
- До тех пор, пока Salesforce не изменит HTML за их страницы настройки и, конечно, не нарушает весь мой код. (Это опасность для разжигания экрана.)
Обратите внимание, что это работает против настройки в «классическом» пользовательском интерфейсе – HTML, вероятно, все по -разному в опыте Lightning. (Я бы не знал – у меня это выключилось!)
Шаг 1: журнал В
Сначала я запустил следующий код Python
from selenium.common.exceptions import NoSuchElementException from selenium.webdriver import Chrome browser = Chrome(executable_path='C:\\exampleprograms\\ChromeDriver\\chromedriver.exe') browser.get('https://test.salesforce.com')
Это привело к появлению особого случая хрома на моем компьютере.
Я вошел в Salesforce с моим именем пользователя и паролем, как обычно.
Шаг 2: Получите ссылки на мои объекты
Затем я прокомментировал код выше и, не позволив мой Python IDE Очистить значение Браузер
переменная (Что является нормальным поведением моей IDE с одной кнопки «Запустить», нажмите на следующую) , Я запустил следующий код:
editableLinksToVisit = [] browser.get('https://cs99.salesforce.com/00e') profilerows = browser.find_elements_by_xpath("//table[contains(@class, 'x-grid3-row-table')]") for profilerow in profilerows: profileLink = profilerow.find_element_by_css_selector("div[id$='ProfileName']").find_element_by_css_selector("a[href*='/00e']") profileBaseURL = profileLink.get_attribute('href') profileEditURL = profileBaseURL + '/e?s=SystemPermissions' editableLinksToVisit.append({'text':profileLink.text, 'editLink':profileEditURL})
Вот что делает вышеупомянутый код:
Browser.get ()
Команда заставила меня посетить новый веб -сайт в Chrome – как будто я сам вводил этот URL в свою панель браузера и нажимал «Enter».- Это довольно триппи – Вы буквально наблюдаете, как ваш компьютер делает вещи без вас, как кто -то другой взял на себя управление.
URL, который я сказал
Browser.get ()
О URL -адресе экрана «Профили».- Обратите внимание, что этот скрипт не будет работать так хорошо, если вы используете представление списка профилей, которые, скажем, не показывают их все – или, по крайней мере, все пользовательские.
- Когда я бегу
Browser.get ()
, содержимое, хранящееся в моей программеБраузер
переменное изменение. Тогда я использую различные Методы встроенный в тип данных Я хранился в
Браузер
(Я точно забыл, что это такое) , например,.find_Element_by_css_selector ()
, к Scrape Содержание этой конкретной веб -страницы.- Технически, я соскребаю DOM или то, что вы видите, когда используете инструмент Firefox или Chrome Developer «Осмотреть элемент», а не соскребать источник HTML. Их содержимое постоянно отличается. Раньше вы могли сказать, что HTML составляла страницу, просто посмотрев на его источник. В наши дни JavaScript может «вводить» HTML в «DOM» в последнюю минуту, а ваш браузер на самом деле Отдает веб -страницу на основе DOM, поэтому вы должны знать, как проверить, что на самом деле в DOM, если вы хотите проанализировать код за веб -страницей.
- Мой
для
Loop ищет ссылки на странице внутри
Tagset, чей...id
Свойство заканчивается ”profilename
“, что указывает на URL, содержащий текст ”/00e
. “ - Тогда я получаю имя объекта (по тексту ссылки) и его URL.
- Наконец, я редактирую ссылку, прилипая
/e? S = Systempermissions
В конце этого – теперь вместо того, чтобы посетить страницу обзора профиля, я перейду прямо на редактируемую страницу конфигурации «разрешения системы», когда я посещаю свою ссылку.
Мой большой список имен объектов и их ссылки – это то, что я храню как editablelinkstovisit
Анкет
Шаг 3: Нажмите на множество кнопок
Я снова прокомментировал приведенный выше код и, не позволяя моему Python IDE выяснить значение любых переменных (Что является нормальным поведением моей IDE с одной кнопки «Запустить», нажмите на следующую) , взялся на растяжение и запустил следующий код (Потребовалось около 1-2 минуты, чтобы запустить 30 профилей ) :
for linkDict in editableLinksToVisit: print() print(linkDict.get('text')) browser.get(linkDict.get('editLink')) try: submitbutton = browser.find_element_by_css_selector("input[type='submit'][value='Save'][id$='button_pc_save']") except NoSuchElementException: submitbutton = None try: checkedCheckbox = browser.find_element_by_css_selector("input:enabled:checked[type='checkbox'][title='LightningExperienceUser']") except NoSuchElementException: checkedCheckbox = None if submitbutton is not None and checkedCheckbox is not None: print('submit ' + str(submitbutton is not None)) print('checkbox ' + str(checkedCheckbox is not None)) checkedCheckbox.send_keys(" ") submitbutton.send_keys("\n") print('done') else: print('There is nothing to save.')
Этот код представляет собой цикл по всем парам ссылок Description-Url ( Словаря ) Я спас в editablelinkstovisit
Анкет
Вот что это делает для каждый Ссылка в списке:
- Это записывает записку, которую я могу прочитать, рассказывающий мне, какой объект он должен был угнать мой браузер, чтобы посетить URL
- Он угонает мой браузер и посещает этот URL.
- Он считывает код DOM страницы, чтобы найти кнопку Сохранить.
- Если его нет, это отмечает это.
Он считывает код DOM страницы, чтобы найти первый флажок на странице под названием
LightningExperienceUser
Это в настоящее время проверяется и не проверяется.- Если его нет, это отмечает это.
- Если это найдет что-то, что «могло бы использовать неверную проверку», это делает это.
- Я использую подражание нажатию космической панели после «вкладка» на флажок с клавиатурой, а не Селена
. клик ()
командование, потому что. клик ()
не работал надежно, и кто -то в Stackoverflow сказал, что это может И они были правы. 🤷
- Я использую подражание нажатию космической панели после «вкладка» на флажок с клавиатурой, а не Селена
- Он нажимает кнопку Сохранить (Опять же, я моделирую это, практически нажимая «Enter» на клавиатуре, а не нажав, потому что по какой -то причине, которая работала более надежно) Анкет
Вы можете посмотреть свой браузер «драйв» без вас. Это немного весело.
Там также много print ()
Примечания, чтобы вы могли посмотреть, что происходит от вашего терминала «стандартного вывода» программного обеспечения, в котором вы запускаете свой код Python, и предвидеть, насколько далеко он находится в списке.
Вывод
Так … вот ты. Новая вечеринка для ленивых администраторов.
Получайте удовольствие, и не забудьте дать людям вас сделать Хотите иметь возможность увидеть опыт молнии, который разрешается в разрешении, установленном после того, как вы отключите его во всех пользовательских профилях.
Вы делаете это по:
- Создание набора разрешений
- Выйдя в это Область «разрешения системы» и щелчок «Редактировать»
- Проверка флажки «Пользователь Lightning Experience» и нажатие «Сохранить»
- Присвоение пользователю разрешению на задание
Оригинал: “https://dev.to/katiekodes/disabling-lightning-experience-w-python-and-selenium-14m9”