在使用pyqt4和requests库遇到的问题
先贴代码
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论