2017-10-23 9 views
0

私は、デバイスの保証状況を調べるために、Webページに1つのテキストデータを投稿しようとしています。私がこれを試みるたびに、200のHTTPレスポンスコードが得られますが、空のNIDフィールドを持つ送信ボタンをクリックしたような結果になります。私は何かシンプルなものを見逃していると確信していますが、それは私を逃すものです。私のPythonコードは次のとおりです。Python Webスクレーパーポストが動作しないようです。

#!python3 
import requests 
from bs4 import BeautifulSoup 
from requests.auth import HTTPBasicAuth 

#This URL is the page you actually want to pull down with requests. 
REQUEST_URL = 'https://teamroom.tantalus.com/web/city-of-fulton/warranty-lookup' 

s = requests.Session() 

r = s.get(REQUEST_URL, headers=headers) 
print('REQUEST_URL: ',r.status_code) 
bsObj = BeautifulSoup(r.text, 'html.parser') 
action = bsObj.find('form', id='warrantyLookup').get('action') 
nid = {'nid':'0017B1CC64'} 
r = s.post(action, data=nid, headers=headers) 
print(r) 
print('NID LOOKUP POST RESULT: ', r.status_code) 
r = s.get(action, headers=headers) 
print('NID LOOKUP RESULTS GET: ', r.status_code) 
bsObj = BeautifulSoup(r.text, 'html.parser') 
warranty = bsObj.find('div', id='successMessages') 
print('Warranty Results: ', warranty) 
errors = bsObj.find('span', id='nid.errors') 
print('Errors: ', errors.text) 
+0

多分あなたは、あなたがブラウザでトラフィックを検査しようとすることができ、データをエンコードする必要がありますか? – PRMoureu

答えて

0

実際にポストリクエストがどのように見えるのか確認しましたか?

たとえば、クロームで行うことができます。 これでpythonでその投稿要求を再現する必要があります。

enter image description here

+0

はい、しました。そのため、私はBeautiful Soupを使用してアクションURLを抽出し、postステートメントでそれを使用しています。ポストコールのデータパラメータにNIDを指定します。 Chromeで最も慎重にアクションURLを確認しましたが、クエリパラメータの値を変更する必要がないと思われるため、アクションURLは変更しません。それは間違っていますか? 返されるエラー条件は、フォームが空白のNIDフィールドで送信された場合と全く同じです。 – UtilityITC

+0

その場合、おそらくあなたはOWASP ZAPを見て、ブラウザでプロキシを使うべきです。 OWASP ZAPはあなたのブラウザから出て行くトラフィックに関するより詳細な情報を提供します。次に、要求を複製しようとする可能性があります。多分、あなたがクロムで見ることができないリダイレクトや何かが起こっているかもしれません。もう一つ。あなたが見るように、クッキーが関与しているかもしれません。多分あなたはそれらを渡さなければならないかもしれません。 – MichaelRazum

+0

OWASP ZAPにお試しください。 私は、Pythonリクエストライブラリがコックと他のセッションの簿記のケースを取ったと思いましたか? – UtilityITC

関連する問題