Форум сайта python.su
0
Мне нужно как можно быстрее обработать большое количество логинов и паролей. Для этого создаю несколько экземпляров 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_())
Отредактировано dima2881 (Янв. 18, 2016 03:15:59)
Офлайн
186
Насколько помню куки у них будут общими. Что-бы заходить под разными пользователями надо назначать свои cookieJar каждому экземпляру NetworkAccessManager-а.
> Мне только нужно, чтобы js код на старнице интерпретировался и чтобы я мог авторизоваться сохранить итоговую страницу.
Тогда лучше смотреть в сторону grab или selenium-а.
Офлайн
0
RodegastНа сколько я помню grab не умеет интерпретировать js. Что касается selenium, так я как раз с него и начал, но в итоге пришёл к pyqt. Как оказалось phantomjs отвратительно работает через проксю, ну и вообще таскать вместе с приложением внешний брайзер это как-то не очень + очень сомниваюсь, что там быстро все будет работать. Мне кажется pyqt полегче значительно.
Тогда лучше смотреть в сторону grab или selenium-а.
Офлайн
0
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()
Офлайн
186
> непомогает
Там всё немного сложнее. Надо создавать наследника от QNetworkCookieJar и устанавливать в нём собственное хранилище кук, иначе они будут из одного места идти.
http://www.prog.org.ru/topic_14097_0.html
Офлайн