Как отключить 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