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

发布于 2022-09-04 14:28:21 字数 2142 浏览 18 评论 0

先贴代码

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文