質問は一般的なものですが、スピナーで奇妙なエラーが発生しています。Spynner は、Python 用のステートフル Web ブラウザー モジュールです。それが機能するときは正常に機能しますが、ほとんどすべての実行でこれを言って失敗します-
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/spynner-2.16.dev0-py2.7.egg/spynner/browser.py", line 1651, in createRequest
self.cookies,
AttributeError: 'Browser' object has no attribute 'cookies'
Segmentation fault (core dumped)
ここでの問題は、セグメンテーション違反であり、続行できません。
spynner のコードを見ると、Cookie 変数が実際には次の__init__()
ように Browser クラスの関数で初期化されていることがわかります。
self.cookies = []
__init__()
失敗すると、cookie 変数が表示されないため、実行されていないと実際に言っています。どうすればそれが可能になるのかわかりません。spynner モジュールに限定せずに、python オブジェクトがこのようなエラーでどのように失敗するかについて誰かが推測できますか?
編集:コンパクトに表示するためにすべてを1か所にまとめたわけではないことを除いて、ここにコードを貼り付けたはずです。もっと早くやるべきだったのですが、全体の構造と spynner のインスタンス化と使用方法を以下に示します。
# helper class to get url data
class C:
def __init__(self):
self.browser = spynner.Browser()
def get_data(self, url):
try:
self.browser.load(url)
return self.browser.html
except:
raise
# class that does other stuff among saving url data to disk
class B:
def save_url_to_disk(self, url):
urlObj = C()
html = urlObj.get_data(url)
# do stuff with html
# class that drives everything
class A:
def do_stuff_and_save_url_data(self, url):
fileObj = B()
fileObj.save_url_to_disk(url)
driver = A()
# call this function for multiple URLs.
driver.do_stuff_and_save_url_data(url)
私がそれを実行する方法は---
# xvfb-run python myfile.py
セグメンテーション違反は、おそらく私が行っている別のものです。私が使用している xvfb が適切に処理されていないためでしょうか? 私にはまだ分かりません。私はPythonに比較的慣れていないことに言及する必要があります。
「 http://www.google.com 」と言って上記のコードを実行すると、1回おきにsegfaultが発生することに気付きました。