Найти - Пользователи
Полная версия: Pyqt работа с несколькими экземплярами qwebview
Начало » Python для новичков » Pyqt работа с несколькими экземплярами qwebview
1
dima2881
Мне нужно как можно быстрее обработать большое количество логинов и паролей. Для этого создаю несколько экземпляров qwebview, там открываю нужный сайт пытаюсь авторизоваться (сейчас пока 1 логин и пароль используется, так как пока только присматриваюсь к работе через pyqt).
Возникла проблема в том, что открывается как и положено несколько окон с сайтом, но авторизация начинается только в 1 из окон, в остальных только форма входа прогружается и больше ничего не происходит. Помогите понять в чем проблема может быть?

P.S Ещё вопрос правильно я делаю, что использую qwebview? Просто окно по сути мне не надо и в конечном приложении я его отображать не буду. Мне только нужно, чтобы js код на старнице интерпретировался и чтобы я мог авторизоваться сохранить итоговую страницу.
Может мне на основе другого класса производить парсинг, чтобы ресурсов меньше тратилось?
import sys
from PyQt4 import QtCore, QtGui, QtWebKit
from PyQt4 import QtNetwork
 
 
class NetworkAccessManager(QtNetwork.QNetworkAccessManager):
    def __init__(self, *arg, **args):
        QtNetwork.QNetworkAccessManager.__init__(self, *arg, **args)
        proxy = QtNetwork.QNetworkProxy()
        proxy.setType(QtNetwork.QNetworkProxy.Socks5Proxy)
        proxy.setHostName('187.160.129.238')
        proxy.setPort(10000)
        self.setProxy(proxy)
 
 
class WebPage(QtWebKit.QWebPage):
    def __init__(self, *arg, **args):
        QtWebKit.QWebPage.__init__(self, *arg, **args)
        net_manager = NetworkAccessManager()
        self.setNetworkAccessManager(net_manager)
        self.conf = self.settings()
        self.conf.setAttribute(self.conf.AutoLoadImages, False)
 
 
class Browser(QtWebKit.QWebView):
    def __init__(self, *arg, **args):
        QtWebKit.QWebView.__init__(self, *arg, **args)
        self.loadFinished.connect(self.load_complete)
 
    def load_complete(self):
        page = self.page().mainFrame().documentElement()
 
        user = page.findFirst('#login-appleId')
        passwd = page.findFirst('#login-password')
        submit = page.findFirst("#sign-in")
        user.evaluateJavaScript("this.value='qwerty@mail.ru'")
        passwd.evaluateJavaScript("this.value='123456'")
        submit.evaluateJavaScript("this.click()")
 
        if self.url().toString() == 'https://secure1.store.apple.com/shop/order/list?hist=545':
            print(self.url())
 
 
br = []
 
app = QtGui.QApplication(sys.argv)
 
for i in range(5):
    br.append(Browser())
    br[i].setPage(WebPage())
    br[i].load(QtCore.QUrl('https://secure1.store.apple.com/shop/order/list?hist=545'))
    br[i].show()
 
sys.exit(app.exec_())
Rodegast
Насколько помню куки у них будут общими. Что-бы заходить под разными пользователями надо назначать свои cookieJar каждому экземпляру NetworkAccessManager-а.

> Мне только нужно, чтобы js код на старнице интерпретировался и чтобы я мог авторизоваться сохранить итоговую страницу.

Тогда лучше смотреть в сторону grab или selenium-а.
dima2881
Rodegast
Тогда лучше смотреть в сторону grab или selenium-а.
На сколько я помню grab не умеет интерпретировать js. Что касается selenium, так я как раз с него и начал, но в итоге пришёл к pyqt. Как оказалось phantomjs отвратительно работает через проксю, ну и вообще таскать вместе с приложением внешний брайзер это как-то не очень + очень сомниваюсь, что там быстро все будет работать. Мне кажется pyqt полегче значительно.
dima2881
Rodegast
Насколько помню куки у них будут общими. Что-бы заходить под разными пользователями надо назначать свои cookieJar каждому экземпляру NetworkAccessManager-а.
Изменил вот так
for i in range(5):
    br.append(Browser())
    page = WebPage()
    page.networkAccessManager().setCookieJar(QtNetwork.QNetworkCookieJar())
    br[i].setPage(page)
    br[i].load(QtCore.QUrl('https://secure1.store.apple.com/shop/order/list?hist=545'))
    br[i].show()
непомогает
Rodegast
> непомогает

Там всё немного сложнее. Надо создавать наследника от QNetworkCookieJar и устанавливать в нём собственное хранилище кук, иначе они будут из одного места идти.
http://www.prog.org.ru/topic_14097_0.html
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB