2016-07-01 2 views
0

stackoverflow에서 많은 문제를 발견했지만 불행히도 특정 웹 사이트에 대한 해결책을 찾을 수 없었습니다.VBA 프로그래밍 - 웹 사이트에서 자바 스크립트 링크 클릭

나는 은행 웹 사이트에서 자동으로 보고서를 생성하려고 VBA를 시도하고 있습니다. 웹 사이트에 접속하여 아무런 문제없이 내 사용자 ID와 암호를 연결할 수있었습니다. 나는 정상적으로 보고서를 생성 할 수있는 페이지에 도달했습니다. 이제 링크 클릭을 시뮬레이트해야합니다 ...하지만 그렇게 할 수는 없습니다.

Here is a screenshot of the website, with the HTML code of the link I have to click on to generate the report (Summary Report Copy). 여기

내가 클릭 할 필요가 링크의 HTML 코드 :

<a id="irCustomStepOne:headerDataTableId:23:reportnamestatus" href="#" style="float:left;" title="Summary Report Copy" onclick="jsf.util.chain(this,event,'if(isDateValidForMassPayPD()==\'false\' &amp; isWareHouseRptPD(\'23\') ==\'true\'){RichFaces.$(\'irCustomStepOne:panelWareHouseRptError\').show(event, {\'top\':\'100px\', \'left\':\'300px\'});return false;}else{if(!onReportLink(\'23\')) return false;}','mojarra.jsfcljs(document.getElementById(\'irCustomStepOne\'),{\'irCustomStepOne:headerDataTableId:23:reportnamestatus\':\'irCustomStepOne:headerDataTableId:23:reportnamestatus\',\'repId\':\'3368127\',\'dayTypeKey\':\'PREVIOUS_DAY\',\'userAction\':\'Run\'},\'_blank\')');return false" class="">Summary Report Copy</a> 

내가 VBA 코드의 줄을 시도했지만 작동하지 않습니다

IE.Document을 .getElementById ("irCustomStepOne : headerDataTableId : 23 : reportnamestatus").대로 FireEvent "onclick을"

누구나 VBA이 "요약 보고서 복사"감사를 클릭하는 방법을 어떤 생각이?

고마워요!

편집 : 링크가있는 웹 페이지 부분의 전체 HTML 코드입니다. 올바른 ID를 사용하지 않았을 수 있습니까?

<td width="290px"> 
<span id="irCustomStepOne:headerDataTableId:23:reportNmGrp"> 
<a id="irCustomStepOne:headerDataTableId:23:reportnamestatus" href="#" style="float:left;" title="Summary Report Copy" onclick="jsf.util.chain(this,event,'if(isDateValidForMassPayPD()==\'false\' &amp; isWareHouseRptPD(\'23\') ==\'true\'){RichFaces.$(\'irCustomStepOne:panelWareHouseRptError\').show(event, {\'top\':\'100px\', \'left\':\'300px\'});return false;}else{if(!onReportLink(\'23\')) return false;}','mojarra.jsfcljs(document.getElementById(\'irCustomStepOne\'),{\'irCustomStepOne:headerDataTableId:23:reportnamestatus\':\'irCustomStepOne:headerDataTableId:23:reportnamestatus\',\'repId\':\'3368127\',\'dayTypeKey\':\'PREVIOUS_DAY\',\'userAction\':\'Run\'},\'_blank\')');return false">Summary Report Copy</a> 
<a id="irCustomStepOne:headerDataTableId:23:reportnamePrint" href="#" style="float:left;display:none;" title="Summary Report Copy" onclick="jsf.util.chain(this,event,'if (!onReportLink(\'23\')) return false;','mojarra.jsfcljs(document.getElementById(\'irCustomStepOne\'),{\'irCustomStepOne:headerDataTableId:23:reportnamePrint\':\'irCustomStepOne:headerDataTableId:23:reportnamePrint\',\'repId\':\'3368127\',\'dayTypeKey\':\'PREVIOUS_DAY\',\'userAction\':\'Print\'},\'_blank\')');return false">Summary Report Copy</a> 
<span id="irCustomStepOne:headerDataTableId:23:rpId" style="float:left;display:none;">3368127</span> 
</span> 
</td> 
+0

당신이'IE.Document.getElementById을 시도했다. click'? –

+0

예, 시도했지만, 다음과 같이 나타납니다. 런타임 오류 '424' 오브젝트 필요 링크의 ID이므로 이해가되지 않습니다 ... – Cyriaque

+0

로 이동 한 후 몇 초 동안 기다리십시오. 문서가 완전히로드되지 않은 것처럼 보입니다. 'Click.Whit (Now + TimeValue ("0:00:08"))' –

답변

0

페이지가 완전히로드 될 때까지 기다려야 할 수도 있습니다. 뭔가 같은

Do: VBA.DoEvents: Loop While IE.Busy ' wait for the page to load 
Dim el 'As IHTMLElement 
Set el = IE.Document.getElementById("irCustomStepOne:headerDataTableId:23:reportnamestat‌​us") 
If el Is Nothing Then el = IE.Document.querySelector("a[title='Summary Report Copy']") 
If el Is Nothing Then MsgBox("Link not found!") : Exit Sub 
el.click 
Do: VBA.DoEvents: Loop While IE.Busy ' wait for next page to load 
+0

안녕하세요 슬라이, 고맙습니다. 귀하의 코드는 "런타임 오류 '424'필요한 개체"를 제공합니다. 우리는 웹 사이트의 구조를 더 잘 이해할 수 있도록 전체 HTML 코드를 붙여 넣을 것입니다. 어쩌면 잘못된 링크를 클릭하려고합니까? – Cyriaque

+0

도구> 참조 ...에서 "Microsoft Internet Controls"및 "Microsoft HTML Object Library"를 확인하십시오. 그런 다음 당신은'Dim IE As New SHDocVw.InternetExplorer'와 같은 것을 필요로합니다. – Slai

+0

그 참조는 이미 불행하게도 활성화되었습니다 ... – Cyriaque

0

이것은 항상 나를 위해 일했다. 제발 시도 : ("headerDataTableId : 23 : irCustomStepOne reportnamestatus")

For each lnk in IE.Document.getElementByTagName("a") 
If lnk.ID = "irCustomStepOne:headerDataTableId:23:reportnamestat‌​us" Then 
    lnk.Click 
    Exit For 
Next 
+0

이것은 또한 "Run Time Error '424'Object Required"를 제공합니다. 전체 HTML 코드를 붙여 넣기 때문에 웹 사이트의 구조를 더 잘 이해할 수 있습니다. – Cyriaque