我使用python的 2to3.py 来修复spynner模块。然后在python 3上似乎存在QString的问题。我在spynner中使用 QString = str 修改了browser.py,正如一些用户建议的那样。 首先,我尝试了以下代码
import spynner
browser = spynner.Browser()
browser.set_proxy("http://username:password@host:3128")
browser.load("http://www.google.com/")
现在python引发了以下错误
File "G:\Python33\lib\site-packages\spynner\browser.py", line 1163, in runjs
js_has_runned_successfully = res.isValid() or res.isNull()
AttributeError: 'str' object has no attribute 'isValid'
res在browser.py中定义为
res = self.webframe.evaluateJavaScript(jscode)
spynner真的可以在python 3上运行吗?
答案 0 :(得分:0)
这对我有用。更改此行
js_has_runned_successfully = res.isNull() or res.isValid()
这些行:
if res is None:
js_has_runned_successfully = True
else:
js_has_runned_successfully = isinstance(res, str)
我认为没有任何计划使python 3 https://github.com/kiorky/spynner/issues/9的spynner能够正常工作。但是我可以通过运行以下sed命令来使用它(我没有试图修复整个代码库,我只是想让它在我的应用程序上正常工作):
sed -i "s/from PyQt4.QtCore import SIGNAL, QUrl, QString, Qt, QEvent/from PyQt4.QtCore import SIGNAL, QUrl, Qt, QEvent/g" browser.py
sed -i "s/if isinstance(s, QString)/if isinstance(s, str)/g" browser.py
sed -i "s/js_has_runned_successfully = res.isNull() or res.isValid()/if res is None:\n js_has_runned_successfully = True\n else:\n js_has_runned_successfully = isinstance(res, str)/g" browser.py
sed -i "s/.toUtf8()/.encode('utf-8')/g" browser.py