在使用pyqt4和requests库遇到的问题

nuomimick
  • 113

先贴代码

from PyQt4 import QtGui, QtCore, QtNetwork,QtWebKit
import requests

def download(webview,url):
    loop = QtCore.QEventLoop()
    webview.loadFinished.connect(loop.quit)
    req = QtNetwork.QNetworkRequest(QtCore.QUrl(url))
    webview.load(req)
    loop.exec_()

app = QtGui.QApplication([])
webview = QtWebKit.QWebView()
webview.show()
download(webview,'https://passport.baidu.com/v2/?login')
frame = webview.page().mainFrame()
frame.findFirstElement('#TANGRAM__PSP_3__userName').setAttribute('value','username')
frame.findFirstElement('#TANGRAM__PSP_3__password').setAttribute('value','password')
frame.findFirstElement('#TANGRAM__PSP_3__submit').evaluateJavaScript("this.click()")
#等待结果
elements = QtWebKit.QWebElement()
while elements.isNull():
    #每次循环,都会调用app.processEvents(),用于给Qt事件循环执行任务的时间,比如响应点击事件和更新GUI
    app.processEvents()
    elements = frame.findFirstElement('#displayUsername')

s_cookies = {}
for citem in webview.page().networkAccessManager().cookieJar().cookiesForUrl(QtCore.QUrl('http://www.baidu.com')):
    s_cookies[bytes(citem.name()).decode()] = bytes(citem.value()).decode()

webview.close()
s = requests.Session()
s.headers = {
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding':'gzip, deflate, sdch',
        'Accept-Language':'zh-CN,zh;q=0.8',
        'Connection':'keep-alive',
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36',
        }
s.cookies.update(s_cookies)
r = s.get('http://tieba.baidu.com/p/5007359263')
print(r.status_code)
with open('tieba.html','w') as f:
    f.write(r.text)

代码是想先用webkit登录百度,然后获取登录后的cookie,把cookie放到session中就能访问贴吧了。

现在的问题是我加了cookie后,程序执行到s.cookies.update(s_cookies)就卡住了,不往下执行了。如果不加cookies就能执行。就是把下面的代码注释掉

for citem in webview.page().networkAccessManager().cookieJar().cookiesForUrl(QtCore.QUrl('http://www.baidu.com')):
    s_cookies[bytes(citem.name()).decode()] = bytes(citem.value()).decode()

然后我就很头疼了,这是为什么啊啊啊啊啊啊

说正事,请问有人知道吗 TnT

回复
阅读 2.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏