Найти - Пользователи
Полная версия: У меня ClientForm не хочет нормально работать, когда она в потоке
Начало » Web » У меня ClientForm не хочет нормально работать, когда она в потоке
1
124bit
ClientForm.ParseResponse при многопоточности работает через раз(( то нормально парсит, то нет.. немогу понять почему… возможно ли, что изза многопоточности его использования,?

просто(без потоков) функция в которой используется ClientForm.ParseResponse работает без збоев, а если онп работает сразу в нескольких потоках - то неправильно парсит и ненаходит формы(
и вообще мне кажется, что urllib2 тоже иногда в многопоточности работает не коректно.. как избежать проблем с клиент формой,?
Ferroman
1. Есть кнопка редактировать.
2. Мы не телепаты. Давайте проблему конкретнее.
3. Не обобщайте, - формулируйте нормально проблему.
124bit
воо… простите…это от переизбытка чувств… терь отредактировал))
Ferroman
Лучше, спасибо.
Код бы какой, который иллюстрирует вашу проблему.
124bit
import urllib2
import cookielib
import os
import time
import ClientForm
from BeautifulSoup import BeautifulSoup
import urlparse
import random
import shutil
from Tkinter import *
import ImageTk
import win32clipboard, win32con
import bz2
import wx
import sys
import inspect
import ctypes
from ConfigParser import SafeConfigParser as Config
from wx.lib.mixins.listctrl import ColumnSorterMixin
import threading

class DumbProxyPasswordMgr:
def __init__(self):
self.user = self.passwd = None
def add_password(self, realm, uri, user, passwd):
self.user = user
self.passwd = passwd
def find_user_password(self, realm, authuri):
return self.user, self.passwd
class Authoriz:
def GetClipboardText(self):

win32clipboard.OpenClipboard(0)
clip_data = win32clipboard.GetClipboardData(win32con.CF_TEXT)
clip_text = str(clip_data)
win32clipboard.CloseClipboard()
return clip_text

def buttonPress(self,entry_string):
self.capatcha_value=entry_string
self.window.destroy()



def login(self,username,password,cookieFile,loginURL,capatcha=False,capatchaURL=None,
capatchaForm=None,capatcha_name=None,capatchaType='FineReader',
serviceINI=None,proxy_addres=None,proxy_user=None,proxy_pass=None,loginForm="username",passwordForm="password"):
cj = cookielib.LWPCookieJar()
if os.path.isfile(cookieFile):
cj.load(cookieFile)

cookie_handler=urllib2.HTTPCookieProcessor(cj)
if loginURL[:7]!='http://':
loginURL='http://'+loginURL
if proxy_addres!=None:
proxy= urllib2.ProxyHandler({"http" : "http://"+proxy_addres})
proxy_auth_handler = urllib2.ProxyBasicAuthHandler(DumbProxyPasswordMgr ())
proxy_auth_handler.add_password(None, None, proxy_user, proxy_pass)
opener = urllib2.build_opener(proxy,proxy_auth_handler,cookie_handler)
else:
proxy= urllib2.ProxyHandler()
opener = urllib2.build_opener(cookie_handler,proxy)
urllib2.install_opener(opener)
headers = { 'User-Agent' : "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
'Accept-Language' : 'en-us',
'Accept' : 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*',
'Connection' : 'Keep-Alive' }
data=None
prov=urllib2.urlopen(urllib2.Request('http://'+urlparse.urlsplit(loginURL)[1],
data,headers))
if prov.read().find(username)==-1: #если еще не залогинено - то надо залогиниться
req1=urllib2.Request(loginURL,data,headers)
forms = ClientForm.ParseResponse(urllib2.urlopen(req1))
form = forms[0]
form[loginForm] = username
form[passwordForm] = password
if capatcha==True and capatchaType=='FineReader': # до этой строки все оч просто и понятно,
#а после нее кусок кода не используеться

req=urllib2.Request(capatchaURL,data,headers)
svf = open(capatcha_name,'wb')
src = urllib2.urlopen(req).read()
svf.write(src)
svf.close()
OCRparams = ['FineOCR.exe', capatcha_name, '/lang English', '/send Clipboard']
os.spawnv(os.P_WAIT, 'ABBYY FineReader 8.0 Professional Edition\\FineOCR.exe', OCRparams)
k=GetClipboardText()
form[capatchaForm] = k
if capatcha==True and capatchaType=='Cap':
req=urllib2.Request(capatchaURL,data,headers)
svf = open(capatcha_name,'wb')
src = urllib2.urlopen(req).read()
svf.write(src)
svf.close()
log=open('log.txt','a')
log.writelines('\n'+time.asctime() +' '+loginURL + ' ' +username+ ' ' + str(proxy_addres) + ' capatcha saved, Cap method started')
log.close()
OCRparams = ['Cap.exe',
'/set Section=CAP Name=FileNameCapture value='+capatcha_name + ' File='+serviceINI]
os.spawnv(os.P_WAIT, 'Cap\\Cap.exe', OCRparams)

shutil.move(capatcha_name, "Cap\\"+capatcha_name)
OCRparams = ['Cap.exe', '/ini '+serviceINI]
os.spawnv(os.P_WAIT, 'Cap\\Cap.exe', OCRparams)
log=open('log.txt','a')
log.writelines('\n'+time.asctime() +' '+loginURL + ' ' +username+ ' ' + str(proxy_addres) + ' capatcha solved by Cap')
log.close()
k=GetClipboardText()
form[capatchaForm] = k
if capatcha==True and capatchaType=='Main':
req=urllib2.Request(capatchaURL,data,headers)
svf = open(capatcha_name,'wb')
src = urllib2.urlopen(req).read()
svf.write(src)
svf.close()
log=open('log.txt','a')
log.writelines('\n'+time.asctime() +' '+loginURL + ' ' +username+ ' ' + str(proxy_addres) + ' capatcha saved, Main method started')
log.close()


self.window = Tk()
self.window.title('Cap')
tv = StringVar()
entry1 = Entry(self.window,textvariable=tv,takefocus=True)
entry1.grid(row=1, column=0)
imtk = ImageTk.PhotoImage(file = capatcha_name)
panel1 = Label(self.window, image=imtk)
panel1.grid(row=0, column=0)


button = Button(self.window,text='Ok', command=lambda name="Guido": auth.buttonPress(entry1.get()))
button.grid(row=3, column=0)
self.window.mainloop()
k=auth.capatcha_value
form[capatchaForm] = k

#-------------------------------------------
res=urllib2.urlopen(form.click()).read() # заполнил форму, отправил...
if urllib2.urlopen(urllib2.Request('http://'+urlparse.urlsplit(loginURL)[1], # проверил, вошло ли?
data,headers)).read().find(username)==-1:

cj.save(cookieFile)
return 0,'login feild'


else:

cj.save(cookieFile)
return 1,'login complit'

else:

cj.save(cookieFile)
return 1,'allready logined'

serf=Authoriz()
#serf.login('124bit','1993715','cookie2.txt','http://www.thinkbux.com/','128.223.8.113:3124')
#serf.login('blackm','777777','cookie1.txt','http://www.thinkbux.com/','128.2.223.63:3128')
по одному работает.. а одновременно в 2 потоках не хочет.. ошибки лезут.. зашло или не зашло надо в кукисах глядеть… кстати, нет ли советов как это оптимизировать,,?

вообще по моим раСчетам эта бодяга должна почти на любой сайт логиниться.
Ferroman
O_O
Код бы откомментировать не мешало бы.
ошибки лезут
Какие именно?
Да и я не вижу в коде, где используются потоки и как.

Е, да вы спамбота написать решили. Не пойдёт.
124bit
ээээ нее… эт никакой не спамбот!!! эт клас автологинер на буксовые сайты.. а вообще а проэкте многоуровневая система заработка в нэте)
так вот, если запустить
#serf.login('124bit','1993715','cookie2.txt','http://www.thinkbux.com/','128.223.8.113:3124')
#serf.login('blackm','777777','cookie1.txt','http://www.thinkbux.com/','128.2.223.63:3128')
в два потока одновременно - оно выкидывает ошибки.. разные, как когда.. иногда клиент форма не парсит - выдает что на странице нет форм(при том что она точно парсит то, где есть формы..) иногда пишет что какаято ошибка с запросом чего то.. я тот комп, где полный код уже выключил, ща посмотреть не могу ((

..откоментировал текст программы.
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