0

セルフホストのWordpressブログにログインし、ダッシュボードへの自動リダイレクト後に別のページに移動していくつかの組み込み関数を自動化する、機械化ブラウザーを使用するPythonスクリプトがあります。

このスクリプトは、実際にはほとんどのブログで100%機能しますが、そのうちの1つで永続的なループに入ります。

違いは、失敗するのはWassupというプラグインだけが実行されていることです。このプラグインはすべての訪問者にセッションCookieを設定し、これが問題の原因であると私は考えています。

スクリプトが新しいページに移動すると、Wordpressコードは適切なCookieセットを取得せず、ブラウザがログインしていないと判断し、ログインページにリダイレクトします。スクリプトは再度ログインし、同じ機能を試行して、もう一度やり直します。

ログインが正しく、Cookieを正しく処理するTwillを使用してみましたが、デフォルトでは、Twillはすべてをコマンドラインに出力します。この時点でページ操作を行っており、生のhtmlにアクセスする必要があるため、これは私が望む動作ではありません。

これはセットアップコードです

# Browser
self.br = mechanize.Browser()

# Cookie Jar 
policy = mechanize.DefaultCookiePolicy(rfc2965=True) 
cj = mechanize.LWPCookieJar(policy=policy) 
self.br.set_cookiejar(cj)

ログインに成功したら、この関数を呼び出します

def open(self):
    if 'http://' in str(self.burl):
        site = str(self.burl) + '/wp-admin/plugin-install.php' 
        self.burl = self.burl[7:]
    else:
        site = "http://" + str(self.burl) + '/wp-admin/plugin-install.php' 
    try:
        r = self.br.open(site, timeout=1000)
        html = r.read()
        return html
    except HTTPError, e:
        return str(e.code)

Cookieをファイルに保存してから、注文をシャッフルして、WordpressセッションのCookieがWassupのCookieの前に返されるようにする必要があると考えています。

他に何か提案はありますか?

4

1 に答える 1

1

これは、後でこれを読む人のためにここに答えを入れることにした理由です.

WordPress サイトのセットアップ時に、URL をデフォルトでhttp://sample.comまたはhttp://www.sample.comにするオプションがあります。これは、Cookie ストレージの問題であることが判明しました。Cookie は、名前の一部として URL とともに保存されます。私のプログラムは、これらの形式のいずれかで URL をセミハードコードします。つまり、新しい URL リクエストを作成するたびに、フォーマットが間違っていて、正しい名前の Cookie が見つからなかったため、WordPress サイトは私がログインしていないと判断し、再度ログインするように送り返しました。

修正は、ログイン後にリダイレクトで配信された URL を取得し、変数 (この場合は self.burl) を再コーディングして、.httaccess ファイルが期待する内容を反映することです。

これで問題が解決しました。これは、私のサイトのいくつかのフォーマットが別のものであったためです。

これがリクエスト、ツイル、機械などの使用に役立つことを願っています.

于 2012-11-27T12:38:40.973 に答える