2017-05-31 7 views
1

テストスイートでは、Firefoxインスタンスを制御するpythonスクリプトをselenium webdriverを使って実行しています。 about:configの設定dom.disable_open_during_loadtrueに変更したいと思います。これは私のデフォルトのFirefoxプロファイルのデフォルト設定ですが、webdriverインスタンスを起動するときはいつでも、セレンはそれをfalse(ユーザ定義)に変更します。それは、匿名の、わずかに変更されたプロファイルを使用するようだ!私はそれを手動で元に戻すことができますが、私はコードでそれをするのに苦労していました。新しいプロファイルを使用することも、Firefoxのプロファイルマネージャで設定されたプリセットプロファイルを使用することも問題を解決することはできません。Selenium:Firefox webdriverのabout:configのブーリアン設定

from selenium import webdriver 

FFprofile = webdriver.FirefoxProfile() 
FFprofile.set_preference('dom.disable_open_during_load', 'true') # I also tried True, 1 - with and without quotes 
# FFprofile = webdriver.FirefoxProfile('C:/Users/ExampleUser/AppData/Local/Mozilla/Firefox/Profiles/owieroiuysd.testprofile') 


FFdriver = webdriver.Firefox(firefox_profile=FFprofile) 
FFdriver.get('http://www.google.com') 

このようにさまざまな設定を変更できますが、この設定は機能しません。変更された値falseは「ユーザー定義」のどこから来たのですか?それはどこかでセレンの自動設定ですか?私が使用しています:

  • geckodriver 0.16.1
  • セレン3.4.2。
  • のFirefox 53.0.3(64ビット)
  • のpython 3.4.4

編集:私はJavaで同じ問題を扱う、SOにthis questionを見つけました。

これが不可能であることが判明した場合は、おそらく素晴らしい回避策がありますか?何か案は?

答えて

1
fp = webdriver.FirefoxProfile() 
fp.DEFAULT_PREFERENCES['frozen']["dom.disable_open_during_load"] = True 

profile.set_preference('dom.disable_open_during_load', True)を使用しないでください。

+1

ようこそ[so]!あなたのコードが何をしているか説明してください。もし誰かが説明なしでそれを理解したら、とにかく自分自身で書くことができるでしょう。 – jpaugh

+0

あまりにも遅く戻ってきて申し訳ありません...うわー、これは本当にうまくいきます!おかげさまで、私はこれを考え出すことはできません! :) – nostradamus

+0

Pycharmでソースコードを読んでデバッグすれば、それを見つけることができます。 – user175257

0

profile.set_preference('dom.disable_open_during_load', True)

それを行うための正しい方法ですが、次の記事によると、ユーザによって変更することが許可されていないとして、それは、この特定のプロパティのために動作しません。同じことが他のパラメータでも有効です。

すなわち

profile.set_preference('browser.download.manager.showWhenStarting', False)

https://www.stigviewer.com/stig/mozilla_firefox/2015-06-30/finding/V-19743

ソリューション

新しいプロファイルを作成し、直接JSファイルでこの設定を変更します。このローカルプロファイルのパスを指定します。私はこのソリューションをテストしていないので、動作するかどうかはわかりません。

+0

ありがとう、それは面白いです。しかし、あなたのリンクでは、この設定は "true"とロックされていますが、webdriverが起動したあとabout:configでチェックすると、私の場合は '(ユーザ定義)false'となります。あなたの提案を参考にしてください:どのJSファイルですか?上記のように、私はプロファイルマネージャーを使って別のFFプロファイルを作成しようとしましたが、この1つの設定はとにかくfalseに設定されています。 – nostradamus

+0

'prefs.js'ファイルは、プロファイルフォルダの下に置く必要があります。 –

+0

ああ、私はそれを見つけた。 'user_pref(" dom.disable_open_during_load "、true);'を追加しましたが、webdriverにはまったく影響していないようです。 – nostradamus

0

この特定の設定は、いくつかの理由で困難であると思わ...

私は解決策を見つけることができませんでしたが、私はthis webpageに触発とFirefoxの「開発者ツールバーを使用してまともな回避策を見つけました:

ActionChains(self.FFdriver).key_down(Keys.SHIFT).send_keys(Keys.F2).key_up(Keys.SHIFT).perform() 
    time.sleep(0.1)  // this seems to be necessary 
    ActionChains(self.FFdriver).send_keys('pref set dom.disable_open_during_load true').perform() 
    ActionChains(self.FFdriver).send_keys(Keys.ENTER).perform() 
    ActionChains(self.FFdriver).key_down(Keys.SHIFT).send_keys(Keys.F2).key_up(Keys.SHIFT).perform() 

誰かがもっと良い方法を知っているか、見つけたら、ご意見ください! profile.default_preferenceは凍結のでオーバーライドされるよう

関連する問題