Quantcast
Channel: Adobe Community: Message List - ColdFusion
Viewing all articles
Browse latest Browse all 21760

Re: Accessing a tab of a specific web page using

$
0
0

Aegis Kleais, I have tried contacting the developer, but I got no answer from him so far.

 

I tried something and now I can access the content that the tab shows me (with a little help of a library of Ben Nadal):

 

<!--- 

Função escrita pelo Ben Nadel

Detalhe de funcionamento em http://www.bennadel.com/blog/779-Parsing-HTML-Tag-Data-Into-A-ColdFusi on-Structure.htm

--->

<cffunction name="ParseHTMLTag" access="public" returntype="struct" output="false" hint="Parses the given HTML tag into a ColdFusion struct.">

<cfargument name="HTML" type="string" required="true" hint="The raw HTML for the tag."/>

    <cfset var LOCAL = StructNew() />

<cfset LOCAL.Tag = StructNew() />

<cfset LOCAL.Tag.HTML = ARGUMENTS.HTML />

<cfset LOCAL.Tag.Name = "" />

<cfset LOCAL.Tag.Attributes = StructNew() />

<cfset LOCAL.NamePattern = CreateObject("java","java.util.regex.Pattern").Compile("^<(\w+)")/>

<cfset LOCAL.NameMatcher = LOCAL.NamePattern.Matcher(ARGUMENTS.HTML) />

    <cfif LOCAL.NameMatcher.Find()>

<cfset LOCAL.Tag.Name = UCase(LOCAL.NameMatcher.Group( 1 )) />

</cfif>

<cfset LOCAL.AttributePattern = CreateObject("java","java.util.regex.Pattern").Compile("\s+(\w+)(?:\s *=\s*(""[^""]*""|[^\s>]*))?")/>

<cfset LOCAL.AttributeMatcher = LOCAL.AttributePattern.Matcher(ARGUMENTS.HTML) />


<cfloop condition="LOCAL.AttributeMatcher.Find()">

<cfset LOCAL.Name = LOCAL.AttributeMatcher.Group( 1 ) />

<cfset LOCAL.Tag.Attributes[ LOCAL.Name ] = "" />

<cfset LOCAL.Value = LOCAL.AttributeMatcher.Group( 2 ) />


<cfif StructKeyExists( LOCAL, "Value" )>

<cfset LOCAL.Value = LOCAL.Value.ReplaceAll("^""|""$","") />

<cfset LOCAL.Tag.Attributes[ LOCAL.Name ] = LOCAL.Value />

</cfif>

</cfloop>

    <cfreturn LOCAL.Tag />

</cffunction>


<cfset urlDestino = "https://sistemas.dnpm.gov.br/SCM/Extra/site/admin/dadosProcesso.aspx?n umero=861738&ano=2013"/>


<!--- Primeira chamada, com o objetivo de obter os cabeçalhos e os campos ocultos para dar continuidade à navegação aqui você poderá dinamizar o resultado de acordo com o que você precisar --->

<cfhttp url="#urlDestino#" method="get" charset="utf-8" result="gResult" timeout="900"/>


<!---//OBTER O CABEÇALHO DA PÁGINA //--->

<!---capturo o cabeçalho da página  e delimito em uma lista apenas os que quero passar para as páginas seguintes --->

<cfset requestHeaders = getHttpRequestData().headers/>

<cfset rhList              = 'accept,accept-encoding,accept-language,cookie,cache-control,connecti on,pragma,user-agent'/>


<!---//OBTER OS CAMPOS OCULTOS DA PÁGINA //--->

<!--- expressão regular para localizar todos os inputs do html da página

   que pode ser aprimorada para localizar apenas os hiddens --->

<cfset hiddenFields = reMatchNoCase("(?i)<input [^>]*[^>]*?>",gResult.fileContent)/>


<!--- A partir da função do Ben, eu extraio o nome e os valores dos inputs

   que serão postados para a página seguinte, excluindo os valores que desviam do resultado esperado --->

<cfset formFields     = []/>

<cfloop index="input" from="1" to="#arrayLen(hiddenFields)#">

<cfset inputResult = ParseHTMLTag(hiddenFields[input])/>

   

    <cfif  NOT findNoCase('btnConsultarProcesso',inputResult.ATTRIBUTES.name)

    AND NOT findNoCase('btnDadosBasicos',inputResult.ATTRIBUTES.name)>

<cfset formFields[input]["name"]  = inputResult.ATTRIBUTES.name/>

        <cfset formFields[input]["value"] = inputResult.ATTRIBUTES.value/>

</cfif>

</cfloop>   


<!---//NAVEGAR PARA PÁGINA POLIGONAL //--->

<cfhttp url="#urlDestino#" method="post" charset="utf-8" result="fResult" timeout="900">

     <!--- injeta os form fields --->  

    <cfloop array="#formFields#" index="key">

        <cfhttpparam type="formfield" name="#key.name#" value="#key.value#"/>

    </cfloop>

    <!--- injeta o cabeçalho--->

    <cfloop collection="#requestHeaders#" index="key">

         <cfif listFind(rhList,key)>

         <cfhttpparam type="header" name="#key#" value="#requestHeaders[key]#"/>

        </cfif>

    </cfloop>

</cfhttp>        


<!---//VISUALIZA A PÁGINA POLIGONAL //--->

<cfoutput>#fResult.fileContent#</cfoutput>

 

 

That's it.

And thanks for helping me!


Viewing all articles
Browse latest Browse all 21760

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>