これは、vbulliten メッセージボードにログインし、スレッドをスキャンして特定のテキストを探し、このテキストを新しい形式で投稿する単純なボットです。私の while ループには、テスト目的で x == 1 という if else 条件があります。これを行うと、mechanize が正常に動作し、正しいフォームが選択され、コードが正常に機能します。しかし、特定の時間に基づいて if else を単純に変更すると、「formnotFound」エラーが発生します。
from BeautifulSoup import BeautifulSoup
from datetime import datetime
import mechanize
import re
import sqlite3
import time
def login(page):
br = mechanize.Browser()
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_equiv(True)
br.set_handle_refresh(True)
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Firefox')]
br.open("http://www.nottherealsite.com")
br.select_form(nr=0)
br.form['vb_login_username']='notrealusername'
br.form['vb_login_password']='notrealpassword'
br.form['cookieuser'] = ['1']
br.submit()
br.open(page)
return br
br = login("http://www.nottherealsite.com")
html = br.response().read()
soup = BeautifulSoup(html)
x = 1
# Ahead you'll see two functions, insertData() and extraction().
# I didn't include them in my submission here
# because I don't think it's necessary. they dont involve anything to do with
# mechanize, they just strip data out of the pages. The functions also work fine
# with the x==1 conditional, fyi
while True:
now = datetime.now()
minute = now.minute
これはうまくいきます:
if x == 1:
print "it is working . . ."
insertData()
votes = extraction()
br.select_form(nr=6)
br.form['message'] = votes
br.submit()
x = 2
else:
print "we are now done"
break
に置き換えるx== 1
とminute > 30
、mechanize で form not found エラーが発生します (そして、時間は 30 分を過ぎていました):
if minute > 30:
print "it is working . . ."
insertData()
votes = extraction()
br.select_form(nr=6)
br.form['message'] = votes
br.submit()
# remember, I am just concerned about mechanize going through
x = 2
else:
print "we are now done"
break
これを使って実際に何をしているのかを伝えるのは難しいかもしれませんが、上記のコードは現在テスト目的であることに注意してください。if else ステートメントを変更すると、機械化が失敗する理由は誰にもわかりますか? 私には意味がありません。ありがとう