Tüm Versiyonu Göster : Internet Explorer ile iletişim
Arkadaşlar
Veterinerlikle ilgili, hayvan ve hayvanlara yapılan işlemlerin tutulduğu resmi bir
siteden, bir excel listesindeki hayvanlara ait bilgileri sorgulayıp, karşılaştırma yapmam gerekiyor.
Aşağıdaki kodla ancak giriş sayfasını geçebiliyorum,
Dim IE
Set IE = CreateObject("internetexplorer.application")
With IE
.Visible = True
.Navigate "http://www.vetbis.com"
Do While .ReadyState <> 4: Loop
With .Document.all
.KULLANICI_ADI.InnerText = "xxxxxx"
.SIFRE.InnerText = "xxxxx"
Do While IE.ReadyState <> 4: Loop
'IE.Document.Forms(0).submit(1).Click
IE.document.forms(0).submit
End With
End With
Set IE = Nothing
Sorun-1 : Giriş sayfasını geçtikten sonra açılan sayfayı okuyamıyorum.
Sorun-2 : Giriş sayfasını geçtikten sonra açılan sayfadan bir butona clikleyip sorgu sayfasına gitmem gerekiyor,sorgu sayfasına direkt gidersem sorgulama yaptırmıyor.
Sorun-3: Sorgu sayfasını manuel olarak açtıktan sonra, aşağıdaki kodla iletişim kurmak istedim hata verdi.
Dim MyApp
Set MyApp = GetObject(, "InternetExplorer.Application")
Sorun-4: Masaüstünde bir URL ile açılmış olan Internet Explorer ile nasıl iletişim kurarım.
Yöntem önemli değil yeterki çözüm olsun, VB VBA Scrip vs. çözüm için farketmez
Yardım ve önerilerinizi bekliyorum.
Sayın draydix,
Sizin açtığınız sayfanın hiçbir önemi yok. Çünkü kullanıcı adı ve şifreyi
http://www.kkgm.gov.tr/index1.asp adresine yolluyor. Tabi ki kullanıcı adı ve şifre olmadan öyle bir sayfa yok uyarısı geliyor veya yok tabi şu anda bilemiyorum.
Onun için siz bu sayfaya giriş yaparak sayfayı kaydedin ondan sonra da inceleyin mutlaka kullanıcı adı va şifresiyle ile ilgili metin kutusu veya kutuları veya kullanıcı adını karşılaştıran bir script var. Ancak ortadaki olayı çözebilirseniz o sayfayı indirebilirsiniz. İndirme dediğimizde de tabi html kodlarını indiriyorsunuz demek. onları da kaydedip size gerekli olan tabloyu bulup içindeki bilgileri excel veya accesse kaydedebilirsiniz.
Benim anladığım şimdilik bu kadar
İyi çalışmalar
Sayın Modalı sayfaya normal giriş yaptığımda tüm html ve scrip kodlarını görüp inceleyebiliyorum.Sorunum Getobject yöntemini kullanamamak
Getobject yöntemi yerine, aşağıdaki kodla sınırlı da olsa sayfaya ulaştım
Sub makro1()
'On Error Resume Next
Set IE1 = CreateObject("Shell.Application")
Set IE2 = IE1.Windows
Set IE3 = IE2.Item
Cells(5, 2) = IE3.document.Title
Cells(5, 2) = IE3.document.all(1).innerText
End Sub
Ama frameli sayfalardan veri okuyamıyorum....
Bu arada ,aşağıdaki kodla sayfadaki linkleri excele yazdırabilirsiniz.
Sub linklerial()
Set IE1 = CreateObject("Shell.Application")
Set IE2 = IE1.Windows
Set IE3 = IE2.Item
Set IeDoc = IE3.Document
For i = 0 To IeDoc.links.Length - 1
Cells(i + 1, 1).Value = IeDoc.links(i).href
Next i
End Sub
Arkadaşlar
Sorunumu hala çözemedim yardımlarınızı bekliyorum.
Manuel olarak aşağıda kaynak kodu ve ekran görüntüsü olan sayfayı açıyorum.
Sorgulamak istediğim listeyi içeren Excel kitabını açıyorum
Yani masa üstünde iki uygulama açık IE ve Excel
Aşağıdaki kodlarla veri almaya çalıştığımda belirtilen hataları veriyor
Cells(5, 2) = IE3.document.frames(1).contentWindow.document.body .innerHTML 'özel durum oluştu
Cells(5, 2) = IE3.document.frames(0).document.body.innerHTML 'erişim engellendi
Ama sayfayı HTML olarak kaydedip bilgisayarımdan çalıştırdığımda aşağıdaki kod iş görüyor
…………………………………………………
'On Error Resume Next
Set IE1 = CreateObject("Shell.Application")
Set IE2 = IE1.Windows
Set IE3 = IE2.Item
x = ActiveCell.Row
Cells(x, 5) = IE3.document.all.tags("table").Item(1).Rows(1).Cells(4).innerText
Cells(x, 6) = IE3.document.all.tags("table").Item(1).Rows(1).Cells(5).innerText
Cells(x, 7) = IE3.document.all.tags("table").Item(1).Rows(1).Cells(6).innerText
Cells(x, 8) = IE3.document.all.tags("table").Item(1).Rows(1).Cells(7).innerText
Cells(x, 9) = IE3.document.all.tags("table").Item(1).Rows(1).Cells(8).innerText
Cells(x, 10) = IE3.document.all.tags("table").Item(1).Rows(1).Cells(9).innerText
Cells(x, 11) = IE3.document.all.tags("table").Item(1).Rows(1).Cells(10).innerText
Cells(x, 12) = IE3.document.all.tags("table").Item(1).Rows(1).Cells(11).innerText
Cells(x, 13) = IE3.document.all.tags("table").Item(1).Rows(1).Cells(12).innerText
……………………………………………………………………………………….
Sayfa kodu
……………………………………………………………………
<HTML><HEAD><TITLE>VetBis P_Query2</TITLE>
<LINK REL="stylesheet" href="P.css" type="text/css">
<SCRIPT src="../../JScript/Picture.js"></SCRIPT>
<SCRIPT src="P_Query2.js"></SCRIPT>
</HEAD>
<BODY onLoad="parent.frames['frame1'].Wait0();" onmouseover="status=''; return true;">
<TABLE width="780" cellPadding="0" cellSpacing="0" border="0">
<TR><TD align="center">
<TABLE width="780" cellSpacing=1 cellPadding=0 border="0">
<FORM name="F1" method="POST" action ="P_Query2.asp">
<TR>
<TD class="H3D" width="45" colspan="3" align="right" ID="TUMU">Tümü</TD>
<TD class="H3D" width="15"><INPUT class="cb" type="checkbox" checked name="ALL" value="" onClick="javascript:CheckAll()"></TD>
<TD class="H3D" width="90">KimlikNo</TD>
<TD class="H3D" width="87">Doğduğuİşl</TD>
<TD class="H3D" width="87">Bulunduğuİşl</TD>
<TD class="H3D" width="30">Cins.</TD>
<TD class="H3D" width="31">Nevi</TD>
<TD class="H3D" width="120">Irkı</TD>
<TD class="H3D" width="65">DoğumTarihi</TD>
<TD class="H3D" width="90">Ana</TD>
<TD class="H3D" width="90">Baba</TD>
<TD class="H3D" width="30" colspan="2"> </TD>
</TR>
<tr bgcolor="#FFFFFF">
<TD><a href="javascript:Submit('P_Edit','TR55713332')"><img border="0" src="../../images/General/ListEdit.gif" Alt="Yenile"></a></TD>
<TD><a href="javascript:Submit('P_Zoom0','TR55713332','5560180' )"><img border="0" src="../../images/General/ListZoom.gif" Alt="Ayrıntılar"></a></TD>
<TD><a href="javascript:Submit('P_Print0a','TR55713332')"><img border="0" src="../../images/General/ListPrint.gif" alt="Pasaport" width="16" height="18"></a></TD>
<TD><INPUT class="cb" type="checkbox" name="cb1" value="TR55713332" checked></TD>
<TD>TR55713332</TD>
<TD>5560180</TD>
<TD>5560180</TD>
<TD>D</TD>
<TD>S</TD>
<TD>Montofon M</TD>
<TD>01.01.2001</TD>
<TD></TD>
<TD></TD>
<TD><a href="javascript:Submit('P_Move','TR55713332')"><img border="0" src='../../images/General/ListMove.gif' alt='Nakil'></a></TD>
<TD><a href="javascript:Submit('P_Del','TR55713332')"><img border="0" src="../../images/General/ListDel.gif" Alt="Sil"></a></TD>
</TR>
</FORM>
</TABLE>
<TABLE cellPadding="0" cellSpacing="0" width="100%" style="border-collapse: collapse" bordercolor="#111111">
<TR>
</TR>
</TABLE>
<BR></TD></TR></TABLE>
</BODY></HTML>
…………………………………………………….
Sayfanın ekran görüntüsü
Sayın drydix,
Benim fikrime göre siz excel üzerinden sayfaya ulaşmaya çalıştığınızda doğru sayfa gelmiyor.
Access de bu tür bir uygulama yaparken öncelikle doğru sayfanın gelip gelmediğini kontrol ediyorum. Siz excelden sayfayı çağırırken nasıl bir yol izliyorsunuz? Öncelikle şifre bölümünü geçmeniz gerekiyor. Ondan sonra da sorgulama yapıyorsunuz bağlandığınız yerin veritabanında. İşte bu noktada önemli olan doğru bağlantı adresini yollamak (sorgu cümlesi dahil)
Basit bir örnek vereyim Türk Telekom web sayfasından telefon no sorgularken şu bağlantı adresini kullanıyorum:
URL = "http://www.ttrehber.gov.tr/trk-wp/IDA2?IDAERROR=&QRY=all&RNG=lequ&CTRY=trk&LANG=tu&PAGE=simpleSearch&LIP=simpleSearch&ACTION=search&STP=S&REQ=20"
Ancak bu yeterli değil bir de buna kendi kriterlerime göre şu eklentileri yapıyorum:
strNAM = "&NAM=" & soyadı
strGIV = "&DOR&GIV=" & adı
strSTN = "&STN=" & İl
strQNA = "&QNA=" & semt
strSorgu = URL & strNAM & strGIV & strSTN & strQNA
Burada telefon numarasını bulmak istediğim kişinin soyadını, adını, ili ve semtini de URL cümlesinin sonuna ekliyorum.
Ondan sonra da
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Navigate strSorgu
Do Until IE.readyState = 4: DoEvents: Loop
temp = IE.Document.all.Item.innerhtml
Kod parçasıyla da bilgileri alacağım sayfaya ulaşıyorum.
Burada temp aldığım sayfanın html kodlarıdır..
İşte bu noktaya kadar öncelikle ulaşmanız gerekiyor. Ben temp i formdaki bir metin kutusunun içeriği olarak atıyorum ve öncelikle doğru sayfanın gelip gelmediğini kontrol ediyorum.
Bu noktaya kadar işleminiz doğru ise ondan sonra bu içeriğin içinden istediğiniz bilgileri excel sayfalarına ulaştıracak olan kod parçalarını kullanabilirsiniz.
Yani özet olarak benim örnekdeki strSorgu nun doğru olması gerekiyor ki doğru web sayfasının içeriğini indirebilesiniz.
İyi çalışmalar:)
Önceki mesajımda yazmayı unuttum.
Kullanılacak olan URL yi normal olarak açtığınız sayfanın adres bölümünden alabilirsiniz. Mesela şu an mesajı yazdığım sayfanın adresi:
http://www.excel.web.tr/newreply.php?do=newreply&noquote=1&p=108645
İki ayrı sorgu yapıp değiştirilmesi gereken yerleri uyarlamanız gerekiyor.
İyi çalışmalar:)
Sayın Modalı
Sayfayı excelden açmaktan vazgeçtim.Nedeni ise;
Sayfaya şifreyle giriliyor,login olunca bir menu sayfası geliyor, oradan sorgu sayfasına geçiliyor,
Bu işlemleri kodla yapınca sayfaların yüklenmesi tamamlanamazsa hatalar oluşuyor,ayrıca kod çok uzun ve her sorgulamada sil baştan giriş yap,menuyu geç ,sorgu kriterlerini belirle bu zaman alıyor ve hatalara neden oluyor
Bana pratik bir yol lazım
Sayfayı kod yazmadan elle açmak ve excelden sorgulamak
Zaten kısmen yapıyorum,sorun sayfada frame kullanılmış ve frameden bilgileri alamıyorum.
..............................................
AppActivate ("internet explorer")
SendKeys "{TAB}", True
SendKeys "{TAB}", True
SendKeys ActiveCell, True
SendKeys "{ENTER}", True
SendKeys "^a", True
SendKeys "^c", True
...................................
gibi bir yöntem kısmen çözüm oluyor ama güvenilir bir yöntem değil.
HTML ve JScript bilgisine ihtiyacım var.
Bahsettiğiniz URL'i ve login kriterlerini vermediğiniz için sayfayı görme şansımız olmadı ama, bence bahsettiğiniz diğer frame aslında başka bir URL'e sahip olabilir.
Örneğin, TCMB'nin adresi;
www.tcmb.gov.tr (http://www.tcmb.gov.tr) 'dir. Bu ana sayfanın sol tarafında bir frame vardır ve bu frame'in URL'i de;
http://www.tcmb.gov.tr/yeni/tablolar.php 'dir.
Eğer sizde de durum yine böyleyse, belki frame'in URL'ini yükleyip oradan birşeyler yapabilirsiniz.
Kesin bir şeyler söylemek için bahsettiğiniz URL ve Login kriterlerini (username, password) bilmek gerekir.
Nihayet sorunumu aşağıdaki kodla hallettim arkadaşlar
Sub sorgula()
On Error Resume Next
Set IE1 = CreateObject("Shell.Application")
Set IE2 = IE1.Windows
Set IE3 = IE2.Item
IE3.document.frames("Menu").frames(0).document.forms("F1").elements(12).Value = "="
IE3.document.frames("Menu").frames(0).document.forms("F1").elements("PEDIGRI_NO").Value = Cells(ActiveCell.Row, 3)
IE3.document.frames("Menu").frames(0).document.forms("F1").submit
Application.Wait Now + TimeValue("00:00:03")
For x = 4 To 11
Cells(ActiveCell.Row, x) = IE3.document.frames("Menu").frames(1).document.forms("F1") _
.document.all.tags("table").Item(1).Rows(1).Cells(x).innerText
Next x
End Sub
Aynı yöntemin tc kimlik için uyarlanmış hali ekte.....
Mahmut Kök
28-11-2006, 23:39
Değerli arkadaşlar,
Birkaç örnek inceledim, excelden internet bağlantısı konusunda bir şeyler öğrenmeye çalışıyorum. Örneklerde, sayfada bulunan "giriş" düğmelerinin kod ile çalıştırılması prensibi nedir? Yani bir örnekte .click demiş, diğerinde .clik filan yok.
Bir sayfa üzerinde deniyorum çalışmamı, kullanıcı adı ve şifreyi atıyor, ama gişiş düğmesine basmıyor bir türlü.. Bir sayfadaki giriş düğmesine nasıl basmış oluruz?
Bu konuda bilgi verirseniz veya bu konuda bilgi içeren bir adres verirseniz memnun olurum. İyi çalışmalar..
Sayın mesleki;
Bende geçerli bir kullanıcı adı ve şifre olmadığı için tam olarak deneyemedim ama dosyanız ektedir.
Sayın mesleki;
Çözüm işinize yaradı mı ?
Mahmut Kök
14-12-2006, 13:23
Sayın Haluk, çok sağolun. Nasıl yaptığınızı anlamaya çalışıyorum şu anda. Birkaç deneme yapmam gerekiyor. Aynı şekilde açılacak sayfalarda çıkan düğmelere tıklayıp bilgi de girebilir miyiz acaba.
Yani asıl amacım, excelden kısamesaj göndermek. Bir yere telefon nosunu, diğer yere de iletimi yazayım, makro sayfaya girsin, açılan sayfadan da tekrar ilgili yere girsin, sonra da yine ilgili yerlere, gerekli bilgileri girsin ve iletiyi göndersin.
kurum bana xml kodlarını filan verdi, ben de forumdan birtakım dosyalar indirip okuyarak öğrenmeye çalışıyorum. XML kodları ile, doğrudan ileti gönderilebiliyor sanıyorum, ama nasıl yapacağımı bilmiyorum işte.
İlginize teşekkür ederim, bana yol göstermenizi dilerim.
veyselemre
14-12-2006, 14:22
İnternetten aldığım örneği size uyarladım. Bir deneyin.
Aşağıdaki xml kodlarını sayfa üzerinde A sutununa düzenleyerek yazın.
<?xml version="1.0" encoding="iso-8859-9"?>
<mainbody>
<header>
<company>AYTEL</company>
<password>Sifre</password>
<startdate>151020061828</startdate>
<stopdate>171020061425</stopdate>
<type>1:n</type>
</header>
<body>
<msg><![CDATA[Deneme Mesajı]]></msg>
<no>905551234567</no>
<no>905551234567</no>
</body>
</mainbody>Vba penceresinde referanslarda Microsoft XML, v5.0 referansını ekleyin.
Aşağıda ki kodları deneyin.
Sub postala()
Dim objXMLHTTP As MSXML2.XMLHTTP
Set objXMLHTTP = New MSXML2.XMLHTTP
Dim newXML As String
For x = 1 To [a65536].End(3).Row
newXML = newXML & Cells(x, 1)
Next x
objXMLHTTP.Open "post", "http://www.aytelsms.com/post/SendBulkSMS.asp", False
objXMLHTTP.send newXML
'*** The following line will display the results!! ***
'MsgBox objXMLHTTP.responseText
Set objXMLHTTP = Nothing
End Sub
Mahmut Kök
14-12-2006, 19:18
Şu anda Sayın Halûk'un verdiği kodlardan hareketle, sayfa içinde 2 sayfa daha ilerledim; İlerledim yani biraz. :)
vBulletin v3.7.2, Copyright ©2000-2012, Jelsoft Enterprises Ltd.