4

Selenium WebDriver (ディスプレイとしてPyVirtualDisplayを使用) を使用して Flickr にログインする Python スクリプトがあります。

Debian サーバーで自分自身として実行すると、正常に動作します。(私は sudoer ですが、スクリプトの実行時に sudo は使用しません。)

ユーザーとして実行するとwww-data(Django Web サイトからトリガーしたいので、最終的にはこのように実行されます)、2 つの問題が発生します。

  1. (小):webdriver.Firefox()呼び出しが戻るまでに 30 ~ 45 秒かかりますが、自分で実行した場合は 2 秒です
  2. (大): スクリプトは Flickr へのログインに失敗します。ログインするには、Flickr のサインイン ページ (http://www.flickr.com/signin/) でユーザー名とパスワードのフィールドを探し、ユーザー名とパスワードelement.send_keys()を入力します。Selenium は要素を見つけているように見えますが (つまり、noがスローされます)、スクリプトが自分自身として実行された場合とは異なり、スクリプトが as として実行された場合(私が を使用して撮影したスクリーンショットによると) NoSuchElementException、フィールドに値が入力されません。www-databrowser.save_screenshot

send_keys()スクリプトを として実行すると機能しないのはなぜwww-dataですか? (そして、ブラウザの起動に時間がかかることに関連していますか?)

4

4 に答える 4

2

たぶん、あなたはあなたの環境に何か違うものを持っています。

~/.bashrc例を挙げてコピーしてみてください/home/www-data

十分でない場合は、このコマンドを現在のユーザーと次の両方で実行しますwww-data

strace -tt -f -s 1000 -o /tmp/trace ./script.py

そして、それをどこかに貼り付けます(ログイン/パスワードを除外します)。

何が起こるかを見ていきます。

于 2012-10-07T12:07:19.417 に答える
1

Firefoxは、起動時に厄介なプラグインの互換性チェックを実行することがあります。各ユーザーは異なるブラウザプラグインのセットを持つことができるため、これが起動時間の違いの原因となる可能性があります。Firefoxプロファイルをユーザー間で同期してみることができます。

次に、ユーザーwww-dataとしてのFirefoxが適切なネットワーク/インターネットアクセスを持っていることを確認しますか?FlickrサイトがSeleniumHQを介して正しく読み込まれることを確認できますか?「スクリプトがFlickrにログインできません」は不正確すぎます。失敗する理由についての詳細は、問題を即座に明らかにする可能性があります。

編集:申し訳ありませんが、Seleniumがプロファイルを作成するため、プロファイルに違いはないはずだと理解しました。それでも、私の2番目のポイントは役立つかもしれないので、この回答は削除しません。

于 2012-10-08T20:18:46.257 に答える
1

さらに考慮すべき点がいくつかあります。

  • 一度 www-data アカウントから手動で Firefox を起動し、スクリプトを実行するたびに Firefox が更新されていないことを確認できますか? Windows 上の Selenium RC でこの問題に直面したことがあり、更新されたバイナリでスクリプトを開始する前に、更新を終了する必要がありました。

  • 回避策として、スクリプトを www-data ユーザーとして実行してみることはできると思いますが、ログイン (別名「グリッド」モード) で実行されている webdriver サーバーにリモート接続します。それはあなたのために働くでしょうか?

于 2012-10-10T09:01:03.227 に答える
0

Google から最新のクロムを入手し、代わりにそのブラウザーで input.send_keys() を試すことをお勧めします。

新しいリリースで webdriver の一部の機能が壊れることがあります。Firefox でのテストに熱心な場合は、Selenium Webdriver の古い/新しいバージョンでうまくいくかもしれません。

Mac で send_keys() に関して同様の問題があったことを覚えています。私の問題は、selenium webdriver を更新した後、特定のモーダル ウィンドウで send_keys() が機能しないことでした。動作することがわかっている古い webdriver に戻すことで修正しました。 . ただし、Web ドライバーを駆動するために Python ではなく Ruby を使用していました。

別のユーザーとしてシェルを使用すると、シェルで正しい ENV 変数を取得する際に問題が発生する場合もあります。トラブルシューティングを試みて、すべてのシェル ENV 変数が www-data の下で適切に設定されているかどうかを確認することをお勧めします。

于 2012-10-12T06:32:10.343 に答える