Форум сайта python.su
0
Добрый день.
Есть задача сделать браузинг в IE через Pamie другим потоком, чтобы не залипало PyQT-шное GUI и можно было отменить какие-то действия браузера…
вот упрощенный пример кода
import threading, time
from Pamie import Pamie
class myThread(threading.Thread):
def __init__(self, func):
threading.Thread.__init__(self)
self.keepRunning = True
self.func = func
def run(self):
while self.keepRunning:
self.func()
self.keepRunning = False
def stop(self):
self.keepRunning = False
if __name__ == '__main__':
class MyCLass():
def __init__(self):
self.ie = Pamie.PAMIE()
self.ie.navigate('www.google.com')
def go(self):
self.ie.navigate('www.yandex.ru')
def tt (self):
self.t = myThread(self.go)
self.t.start()
## self.ie.quit()
c = MyCLass()
c.tt()
Офлайн
0
может, это из-за блокировки интерпретатора (GIT)?
потому что из потока могу получать доступ к полям класса..а вот к ИЕ - нет..
пробовал другие связки - эффект тотже…
Офлайн
0
пробую обращаться к ИЕ через com интерфейс напрямую
import threading, time
from win32com.client import Dispatch
import time,threading,pythoncom,sys
stopEvent=threading.Event()
def waitUntilReady(ie):
if ie.ReadyState!=4:
while 1:
pythoncom.PumpWaitingMessages()
stopEvent.wait(.2)
if stopEvent.isSet() or ie.ReadyState==4:
stopEvent.clear()
break;
class myThread(threading.Thread):
def __init__(self, func):
threading.Thread.__init__(self)
self.keepRunning = True
self.func = func
def run(self):
while self.keepRunning:
self.func()
self.keepRunning = False
def stop(self):
self.keepRunning = False
if __name__ == '__main__':
class MyCLass():
def __init__(self):
self.ie=Dispatch('InternetExplorer.Application')
self.ie.Visible=1
self.ie.Navigate("http://www.google.com")
def go(self):
pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)
self.ie.Navigate('www.yandex.ru')
def tt (self):
self.t = myThread(self.go)
self.t.start()
c = MyCLass()
c.tt()
Офлайн