
Daha önce bir
captcha okuma uygulaması yazmaya karar vermiştim. Karşıma çıkan engellerden biri, dinamik captcha resmini sayfa ile birlikte, alıp düzenleyebileceyim bir picturebox nesnesine kopyalayamamaktı. Resmin adresini alıp, resmi okursam sayfayı aldığımda üretilecek kod farklı olacağı için bu işime yaramayacaktı. Bunu yapmanın yolunu uzun süre aradıktan sonra buldum. Benzer projeleri olan arkadaşlar, googledan buraya eriştiklerinde bu yöntem onlara ilaç gibi gelecek :)
Kodları denemek için form içerisinde hem vbasic6 hem de vbasic.net için Tarayici adında bir WebBrowser ve GuvenlikKodu adında bir PictureBox nesnesi bulunuyor olması gerekiyor.
Kodlardaki Images(0), html dosyası içerisindeki ilk resimdir. Resimlerin indexi, sayfada bulunma sıralarına göre belirlenir.
Aşağıdaki kodla sadece resimlere değil, sayfa içerisinde herhangi bir html etiketinin içeriğine erişebilirsiniz. İsterseniz getElementById(), getElementByTagName() gibi fonksiyonları da kullanabilirsiniz(Javascriptteki gibi). Ama her html elemanının bir id veya isim bulundurması bir zorunluluk olmadığı için ilk yöntem resimler için daha kullanışlı.
Visual Basic 6.0 kodu:
Dim Nesne As Object
Set Nesne = Tarayici.Document.body.createControlRange()
Nesne.Add Tarayici.Document.Images(0)
Nesne.execCommand "Copy"
GuvenlikKodu.Picture = Clipboard.GetData
Visual Basic.Net kodu(arada çok az bir fark var):
Dim Nesne As Object
Nesne = Tarayici.Document.DomDocument.body.createControlRange()
Nesne.Add(Tarayici.Document.GetElementsByTagName.DomDocument.Images(0))
Nesne.execCommand("Copy")
GuvenlikKodu.Image = My.Computer.Clipboard.GetImage()
Captcha okutmaya çalışıyorsanız bunun o kadar kolay bir iş olmadığını anlamışsınızdır. Hele de ttnet, oldukça gürültülü resimler gösteriyor. Önceleri "Arkaplan resimlerini elde edersem, karakterleri saf olarak ayıklayabilirim" diye düşünmüştüm ama ttnet gelen resimlerin kalitelerinde bile değişiklik yapıyor. Yani aynı arkaplanın kullanıldığı güvenlik kodlarında bile belli bir pixel farklı renk değerlerine sahip oluyor. Ama ttnetin karakterleri okumamıza engel olabilmesi için daha çok uğraşması lazım. Rapidshare'in kedili köpekli güvenlik kodları vardı. Onlar gibi olabilir mesela. Ama buna ttnet neden buna ihtiyaç duyuyor anlamıyorum. Program kontrol etsin kotayı ne olacak? Neyse zor bir iş, kolay gelsin...
Okunma Sayısı: 366
Yayınlanma Tarihi: 02 Kasım 2009 Pazartesi - 08:35
Anahtar Kelimeler: visual basic, basic.net, picturebox, resim aktarmak, dinamik resim, execCommand, captcha, ttnet, güvenlik kodu
Onaylı yorum bulunmuyor.
Yorum/Görüş Bildir