Как отключить Javascript при использовании Selenium?

Мне интересно, как отключить javascript при использовании селена, чтобы я мог проверить проверку на стороне сервера.

Я нашел эту статью, но я не знаю, что на самом деле делать. Как я делаю этот файл javascript, то что?

http://thom.org.uk/2006/03/12/disabling-javascript-from-selenium/

Ответы

Ответ 1

редактировать

В то же время появились лучшие альтернативы, см. Другие ответы, например fooobar.com/questions/361985/....

Оригинальный ответ

Другие возможности будут:

  • Напишите ваше приложение для поддержки отключения JavaScript (да, веб- приложение).
    Звучит безумно? Не. В нашем процессе разработки мы делаем именно это, реализуем функции без JS, пока все не появятся, а затем добавим JS. Мы обычно предоставляем хук во всех шаблонах, который может контролировать от одной точки до того, какую JS выкл/вкл из самого веб-приложения. И, да, приложение трудно узнать, если JS не включен, но это лучший способ убедиться, что все работает правильно. Мы даже пишем для него тесты Selenium для обеих версий; NOJS и JS. NOJS внедряются так быстро, что они не имеют значения по сравнению с тем, что требуется для написания сложных JS-тестов...
  • Измените соответствующий профиль браузера, чтобы отключить JS. Т.е. для FF вы можете указать Selenium, какой профиль использовать; Вы можете загрузить этот профиль обычным образом, отключить JS в about: config и передать этот профиль в качестве профиля по умолчанию в Selenium RC.

Ответ 2

Это способ сделать это, если вы используете WebDriver с FireFox:

FirefoxProfile p = new FirefoxProfile();
p.setPreference("javascript.enabled", false);
driver = new FirefoxDriver(p);

Ответ 3

Это простой ответ, хотя бы для python.

from selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.set_preference("javascript.enabled", False);
driver = webdriver.Firefox(profile)

Ответ 4

Действия по использованию упомянутого выше script не являются плохими:

  • Создайте файл selenium "user-extensions.js", как указано в статье, которую вы указываете.
  • Выберите "файл user-extensions.js" в настройках Selenium в Options- > Options.
  • Используйте script, выбрав команду "DisableJavascript" или "EnableJavascript" из списка команд (или просто введите ее вручную).

Для примеров снимков экрана, описанных в шагах 2 и 3, см. http://i32.tinypic.com/161mgcm.jpg

Обновление. Для получения информации об использовании user-extensions.js с Selenium RC попробуйте использовать следующий URL-адрес: http://seleniumhq.org/docs/08_user_extensions.html

Ответ 5

По состоянию на 2018 г. вышеуказанные решения не работали для меня для Firefox 61.0.1 и geckodriver 0.20.1.

И вот решение, которое работает.

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

browser_exe = '/path/to/firefox/exe'
browser_driver_exe = '/path/to/geckodriver/exe'

firefox_binary = FirefoxBinary(browser_exe)

profile = webdriver.FirefoxProfile()
profile.DEFAULT_PREFERENCES['frozen']['javascript.enabled'] = False
profile.set_preference("app.update.auto", False)
profile.set_preference("app.update.enabled", False)
profile.update_preferences()

driver = webdriver.Firefox(
    executable_path=browser_driver_exe,
    firefox_binary=firefox_binary,
    firefox_profile=profile,
)

driver.get("about:config")

Теперь в строке поиска введите javascript и вы должны увидеть следующее.

enter image description here

Ответ 6

Похоже, что создание этого файла даст вам функции, которые вам нужно отключить javascript для вашего теста. Вы вызовете функцию doDisableJavascript перед началом теста и функцией doEnableJavascript, если вы хотите снова включить ее.

Ответ 7

Я пытался решить эту проблему и нашел этот блог, но у первого сообщения есть ссылка, которая больше не действительна. Но я, наконец, нашел код для размещения внутри user-extensions.js, который работает. Вот он:

Selenium.prototype.doDisableJavascript = function() {
    setJavascriptPref(false);
};

Selenium.prototype.doEnableJavascript = function() {
    setJavascriptPref(true);
};

function setJavascriptPref(bool) {
   prefs = Components.classes["@mozilla.org/preferences-service;1"]
           .getService(Components.interfaces.nsIPrefBranch);
   prefs.setBoolPref("javascript.enabled", bool);
}

Надеюсь, это сэкономит время, которое потребовалось мне, чтобы найти его.

Ответ 8

Задайте имя браузера в настройках селена на htmlunit.

Это драйвер, который по умолчанию отключен JavaScript https://code.google.com/p/selenium/wiki/HtmlUnitDriver. JavaScript, необходимый для взаимодействия селена со страницей, все еще сможет работать.

Ответ 9

Иногда файл profile.set_preference ( "javascript.enabled", False) не работает в Firefox. Используйте приведенный ниже python, чтобы обойти это:

 from pyvirtualdisplay import Display
 from selenium import webdriver
 from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
 from selenium.webdriver.common.keys import Keys
 from selenium.webdriver.common.action_chains import ActionChains


 profile = webdriver.FirefoxProfile()
 profile.update_preferences() #May or may not be needed

 display = Display(visible=0, size=(1200, 800))
 display.start()

 browser = webdriver.Firefox(profile)
 browser.get("about:config")
 actions = ActionChains(browser)
 actions.send_keys(Keys.RETURN)
 actions.send_keys("javascript.enabled")
 actions.perform()
 actions.send_keys(Keys.TAB)
 actions.send_keys(Keys.RETURN)
 actions.send_keys(Keys.F5)
 actions.perform()

 browser.quit()
 display.stop()

Ответ 10

Если вам нужно решение с Chrome, Chromeriver, Python. Это работает для любой версии Chrome, при условии, что макет для отключения JS остается прежним.

from selenium import webdriver
from selenium.webdriver import ActionChains
from time import sleep

path = 'chrome://settings/content/javascript'
options = webdriver.ChromeOptions()
options.binary_location = "/usr/bin/chromium"
driver = webdriver.Chrome(chrome_options=options)
driver.get(path)
# clicking toggle button
sleep(1)
ActionChains(chrome_driver).send_keys(Keys.TAB).send_keys(Keys.TAB).send_keys(Keys.ENTER).perform()
driver.get('https://www.google.com/')

Ответ 11

Вам не нужно отключать JavaScript. Если вы заполните форму, вы можете использовать JavaScript для отправки своей формы, например. используйте runScript и window.document.forms[0].submit().

Всякий раз, когда вы вызываете submit() непосредственно в форме, форма отправляется непосредственно на сервер, нет события onsubmit, и, следовательно, нет проверки на стороне клиента. (Если ваше действие формы не похоже на javascript:validateForm(), в этом случае ваша система не работает, когда JavaScript отключен).

Ответ 12

Вы можете отключить JavaScript во время выполнения, используя код:

WebDriver driver = new FirefoxDriver();
driver.get("about:config");
Actions act = new Actions(driver);
act.sendKeys(Keys.RETURN).sendKeys("javascript.enabled").perform();
Thread.sleep(1000);
act.sendKeys(Keys.TAB).sendKeys(Keys.RETURN).sendKeys(Keys.F5).perform();

Ответ 13

Я подставляю этот параметр в конфигурации Options(), я не помню, от кого я его увидел (для кого-то на SO), но он работает:

from selenium.webdriver.firefox.options import Options

options = Options()
options.preferences.update({'javascript.enabled': False})
browser = webdriver.Firefox(options=options)

Selenium 3.14 и Firefox 63.0