LINUX.ORG.RU

Как управлять настройками Firefox из webdriver?

 , ,


0

3

Всем привет. Встала такая задача - не перезапускать Firefox для переключения, допустим, прокси. Как это сейчас обычно делается? Создаётся профиль для Лисы, указываются настройки, и потом запускается сам браузер с этими настройками. Если надо поменять прокси - опять создаём профиль, глушим браузер, и запускаем новый браузер с новым профилем. Так вот, хотелось бы делать это без мучений с профилями, и тратой времени на перезапуск браузера. Сначала подумал о about:config, зашёл туда с помощью browser.get, попытался найти элемент - всё ок, но как только пытаешься куда-нибудь кликнуть, то получаешь исключение:

StaleElementReferenceException: Message: Element belongs to a different frame than the current one - switch to its containing frame to use it

Ну и конечно в исходном коде страницы никаких iframe-элементов нет. Назревает вопрос - как можно взаимодействовать с настройками Firefox(about:config, about:preferences), написанными на XUL, из Selenium webdriver? Или есть какой-то другой путь сделать это? Может быть открывать нужно какую-то sqlite-базу(не очень в теме как работают настройки Firefox), и там что-то менять? В общем буду благодарен за любую инфу.

ЯННП. Опишите задачу.

И да, prefs.set в контексте обозревателя (не страницы) должен работать без проблем.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Описываю. У меня есть пять прокси, я должен между ними переключаться, но я не могу это сделать без перезапуска браузера с новыми параметрами и новым профилем. Вот и хочу узнать, как можно сделать так, чтобы можно было управлять параметрами браузера без пересоздания профиля.

mahalaka ★★
() автор топика
Ответ на: комментарий от anonymous

Ну может быть да, только это будет сложно, и надо будет писать какой-то свой прокси-сервер, наверное. Да и не в этом дело, не только в проксях. Если я захочу ещё что-то в about:config Лисы подкорректировать - как мне можно будет это сделать?

mahalaka ★★
() автор топика
Ответ на: комментарий от mahalaka

Описываю. У меня есть пять прокси, я должен между ними переключаться, но я не могу это сделать без перезапуска браузера с новыми параметрами и новым профилем.

Ну не знаю, я почему-то могу. Я использую командный интерфейс Пентадактиля, но собственно переключение к нему никак не привязано, так что вот вам выдержка из ~/.pentadactylrc, адаптируйте под ваш интерфейс:

com proxy -description "Switch proxy"
    \ -nargs=1
    \ -complete custom,'[
    \    ["off", "Direct connection"],
    \    ["pac", "Pattern-based"],
    \    ["tor", "TOR"]
    \    ]'
    \ -js <<EOF

    // constants
    let proxyOff = 0;
    let proxyManual = 1;
    let proxyPAC = 2;

    switch(args[0]) {
        case 'off':
            prefs.set("network.proxy.type", proxyOff);
            break;
        case 'tor':
            prefs.set("network.proxy.type", proxyManual);
            prefs.set("network.proxy.socks", "localhost");
            prefs.set("network.proxy.socks_port", 9050);
            prefs.set("network.proxy.socks_version", 5);
            prefs.set("network.proxy.socks_remote_dns", true);
            break;
        case 'pac':
            prefs.set("network.proxy.type", proxyPAC);
            prefs.set("network.proxy.autoconfig_url",
                "file://" + OS.Constants.Path.homeDir + "/.pac");
            prefs.set("network.proxy.socks_remote_dns", true);
            break;
        default:
            dactyl.echoerr("Unknown parameter");
    }
EOF

proxy pac
Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от art_corp

Так и думал. А пример клёвый! Спасибо, попробую. :-)

mahalaka ★★
() автор топика
Ответ на: комментарий от anonymous

Ну если поможет решить мои проблемы, то почему бы и нет. Хотя вариант с нажатием клавиш через dev-консоль наверное то что нужно.

mahalaka ★★
() автор топика
Ответ на: комментарий от mahalaka

А как бы этот Пентадактиль подружить с webdriver?

Понятия не имею, я никогда этим «Веб-драйвером» не пользовался? Может быть, зря не пользовался, это вообще для чего?

Однако еще раз обратите внимание, что переключение доверенных узлов к Пентадактилю никакого отношения не имеет — просто из своего ~/.pentadactylrc я готовый пример скопировать могу, а откуда-либо еще — нет.

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

webdriver, в общем, для управления браузером с помощью простых команд из понравившегося тебе языка. Понятно, что ты не в теме. :-)

mahalaka ★★
() автор топика
Ответ на: комментарий от trashymichael

а почему let а не const?

Я уже точно не помню, но скорее всего потому, что const с точки зрения стандартного языка — это весьма недавнее нововведение (или нет?).

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

вроде const раньше let появился, но точно не позже, я с es6 начал использовать, все константами получается, вроде как const type & в крестах, наверное привычка такая

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

вроде const раньше let появился, но точно не позже

Да? Ну и ладно. Короче говоря, ответ на вопрос «почему let» — нипочему, случайно. :-)

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.