0

セレン オブジェクトを使用せずに、別の URL からリダイレクトされた URL を取得しようとしています。私は次のようなURLを持っています:

     http://registry.theknot.com/track/View?lt=RetailerGVR&r=325404419&rt=12160&a=994&st=RegistryProfile&ss=LinkedRegistries&sp=Logo

そして、次の場所にリダイレクトされます。

     http://www.target.com/RegistryGiftGiverCmd?isPreview=false&status=completePageLink&registryType=WD&isAjax=false&listId=NjPO_i-DoIafZPZSFhaBRw&clkid=2gTTqGRwsXS4x%3AexW%3ATGBxiqUkWXSi0It0P5VM0&lnm=Online+Tracking+Link&afid=The+Knot%2C+Inc.+and+Subsidiaries&ref=tgt_adv_xasd0002

ブラウザで開かれたとき。

Selenium オブジェクトのインスタンス化を避け、リダイレクトされた URL を取得するためだけに Firefox/Chrome プロセスを起動したいと考えています。他に良い方法はありますか?

ありがとう!

4

1 に答える 1

2

これが単なる HTTP リダイレクトである場合、標準ライブラリのurllib.request/urllib2は、 や などのサードパーティの HTTP クライアント ライブラリと同様に、リダイレクトに問題なく従うことができrequestsますPycURL。実際、最も単純な使用例では、これは自動的に行われます。

これだけ:

>>> import urllib.request
>>> original_url = 'http://registry.theknot.com/track/View?lt=RetailerGVR&r=325404419&rt=12160&a=994&st=RegistryProfile&ss=LinkedRegistries&sp=Logo'
>>> u = urllib.request.urlopen(original_url)
>>> print(u.url)
http://www.target.com/RegistryGiftGiverCmd?isPreview=false&status=completePageLink&registryType=WD&isAjax=false&listId=NjPO_i-DoIafZPZSFhaBRw&clkid=0b5XTmU%3A5WbqRETSYD20AQKOUkWXSGQgQSquVU0&lnm=Online+Tracking+Link&afid=The+Knot%2C+Inc.+and+Subsidiaries&ref=tgt_adv_xasd0002

ただし、データだけが必要な場合は、それも必要ありません。

>>> data = u.read()

それがリダイレクトされたリクエストの内容です。

(Python 2.x の場合は、 に置き換えるだけurllib.requesturllib2同じように機能します。)


Selenium (または別のブラウザー自動化および/または JS 環境ライブラリー) を使用する必要がある唯一の理由は、リダイレクトがページ内 JavaScript を介して行われる場合です。通常はそうではなく、この場合もそうではありません。このような単純なことのために、標準ライブラリの外に出たり、別のアプリと話したりする理由はありません。

于 2013-10-15T23:19:52.053 に答える