タイトルが十分に明確であるかどうかわからないので、これがどうした:
私は約 3 週間前に Python の学習を開始しましたが、最近、Web サイトにログインして特定のページを読み、同じページにコメントを投稿するというタスクを自分自身に与えました。すべて Python scrypt を使用しています。ドキュメントを検索したところ、urllib、urllib2、および cookielib モジュールが探していたものであることがわかりました。だから私はこのコードを思いついた:
import urllib, urllib2, cookielib
import re
url_page = 'http://www.example.net/page/'
url_login = 'http://www.example.net/login.php'
url_post = 'http://www.example.net/post.php'
def main():
#login data
username = 'user1'
password = 'user1'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'j_user' : username, 'j_pass' : password})
opener.open(url_login, login_data)
opener.open(url_page)
#comment is in string
s = "abcd"
#post data
post_data = urllib.urlencode({'com' : s})
opener.open(url_post, post_data)
if __name__=='__main__':
main()
最初の部分 (ログイン) は正常に動作し、サイトにログインしてページを取得できます。しかし、何も起こりません - コメントの投稿に失敗します。すると、このサイトでmechanize
モジュールが Web ブラウジングに最適なソリューションであることがわかりました。そこで、このスクリプトを見つけて、目的に合わせて調整しました。
import mechanize
import cookielib
import urllib
import re
#required addresses
url_page = 'http://www.example.net/page/'
def main():
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
r = br.open(url_page)
#selecting form
br.select_form(nr=2)
#setting inputs
br.form['j_user'] = 'user1'
br.form['j_pass'] = 'user1'
#login
r = br.submit()
r = br.open(url_page)
s = "abcd"
#posting
br.select_form(nr=4)
br.form['com'] = s
br.submit()
if __name__ == '__main__':
main()
スクリプトは完璧に実行され、コメントが投稿されます。
だから私の質問は - 最初のスクリプトの問題はどこですか? 最初のスクリプトでコメントを投稿しても結果が得られないのはなぜですか? それは何かが欠けていますか?
お時間をいただき、ありがとうございました。