{"id":935,"date":"2023-08-16T15:13:21","date_gmt":"2023-08-16T06:13:21","guid":{"rendered":"http:\/\/www.charleskwon.com\/?p=935"},"modified":"2023-08-17T19:17:16","modified_gmt":"2023-08-17T10:17:16","slug":"automatic-login-through-dom-automation","status":"publish","type":"post","link":"https:\/\/www.charleskwon.com\/?p=935","title":{"rendered":"Automatic Login Through DOM Automation"},"content":{"rendered":"\n<p><a href=\"https:\/\/forums.fivetechsupport.com\/posting.php?mode=reply&amp;f=3&amp;t=43596&amp;sid=598f688d2d948670a0840378c26fd757\"><\/a><\/p>\n\n\n\n<p class=\"has-drop-cap\">Using the DOM allows you to access a website and automatically log in.<br>It can also automatically insert values into complex &#8220;form&#8221; elements.<\/p>\n\n\n\n<p>However, DOM automation involves many technical considerations.<br>For this example, the following methods and functions were added:<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">METOD &amp; fUNCTOIN List<\/h2>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>METHOD Eval( cEval )<br>METHOD SetValue( cSelector, cValue )<br>METHOD Click( cSelector )<\/p>\n\n\n\n<p>FUNCTION AWait_SetValue( oWeb, cSelector, cValue )<br>FUNCTION AWait_Click( oWeb, cSelector )<\/p>\n\n\n\n<p>The example demonstrates automatically entering an ID on Yahoo.com&#8217;s login page and clicking the &#8216;next&#8217; button.<\/p>\n\n\n\n<p>By applying this technique, you can enter desired values into complex forms.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>This program provides a way for developers familiar with synchronous programming to interact with the inherently asynchronous TWebView control by emulating synchronous behavior. This can be particularly useful in scenarios where one needs to ensure a webpage is fully loaded or a specific element is present before taking further action.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"80\" height=\"80\" src=\"http:\/\/www.charleskwon.com\/wp-content\/uploads\/2023\/08\/image-8.png\" alt=\"\" class=\"wp-image-945\"\/><\/figure>\n<cite>by Otto with ChatGPT<\/cite><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">sample Code<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:15.40625px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/*\nc)copyright 2023-\u00a0charleskwonohjun@gmail.com\u00a0( Seoul, Korea )\n*\/\n#include &quot;FiveWin.ch&quot;\n\nSTATIC oWebView  \n\nFUNCTION Main()\n    LOCAL oDlg\n\n    DEFINE DIALOG oDlg TITLE &quot;WebView Test&quot; SIZE 1200, 700\n\n         oDlg:bStart := { || GetOuterHtml( oDlg  ) }\n\n    ACTIVATE DIALOG oDlg CENTER\n      \nRETURN NIL\n\n\nSTATIC FUNCTION GetOuterHtml( oDlg  )\n   LOCAL cStr\n   LOCAL nCounter := 0\n   LOCAL lOk  := .f.\n\n   oWebView := TWebView():New( , oDlg:hWnd )\n   oWebView:Navigate( &quot;https:\/\/login.yahoo.com\/&quot; )\n\n   SysWait()\n   Sleep(3000)\n   SysWait()\n   \n   WHILE .T.\n      \n      ++nCounter\n      cStr := AWait_QuerySelector( oWebView, &quot;document.readyState&quot;, 3000 )  \n\n      IF cStr == &quot;complete&quot;\n         lOk := .t.\n         EXIT\n      ENDIF      \n\n      SysWait()\n\n      IF nCounter == 10\n         EXIT\n      ENDIF   \n\n   ENDDO\n\n   IF !lOk\n      MsgStop(&quot;Timeout! Try again&quot;)\n      RETURN NIL\n   ENDIF\n   \n\n   AWait_SetValue( oWebView, &quot;#login-username&quot;, &quot;fivewin&quot;)\n   AWait_Click( oWebView, &quot;#login-signin&quot; )\n\nRETURN NIL   \" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">c)copyright 2023-\u00a0charleskwonohjun@gmail.com\u00a0( Seoul, Korea )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">*\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #5E81AC; font-weight: bold\">#<\/span><span style=\"color: #81A1C1\">include<\/span><span style=\"color: #8FBCBB\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">FiveWin.ch<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">STATIC oWebView  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">FUNCTION <\/span><span style=\"color: #88C0D0\">Main<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL oDlg<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    DEFINE DIALOG oDlg TITLE <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">WebView Test<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> SIZE <\/span><span style=\"color: #B48EAD\">1200<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">700<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">         oDlg:bStart :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">||<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GetOuterHtml<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oDlg  <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ACTIVATE DIALOG oDlg CENTER<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN NIL<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">STATIC FUNCTION <\/span><span style=\"color: #88C0D0\">GetOuterHtml<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oDlg  <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   LOCAL cStr<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   LOCAL nCounter :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   LOCAL lOk  :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .f.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   oWebView :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">TWebView<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">:<\/span><span style=\"color: #88C0D0\">New<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> oDlg:hWnd <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   oWebView:<\/span><span style=\"color: #88C0D0\">Navigate<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">https:\/\/login.yahoo.com\/<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #88C0D0\">SysWait<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #88C0D0\">Sleep<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">3000<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #88C0D0\">SysWait<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   WHILE .T.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">++<\/span><span style=\"color: #D8DEE9FF\">nCounter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      cStr :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">AWait_QuerySelector<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWebView<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">document.readyState<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3000<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      IF cStr <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">complete<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">         lOk :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .t.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">         EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      ENDIF      <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #88C0D0\">SysWait<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      IF nCounter <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">10<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">         EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      ENDIF   <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   ENDDO<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   IF <\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\">lOk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #88C0D0\">MsgStop<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Timeout! Try again<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      RETURN NIL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   ENDIF<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #88C0D0\">AWait_SetValue<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWebView<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">#login-username<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">fivewin<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #88C0D0\">AWait_Click<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWebView<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">#login-signin<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN NIL   <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">TAWaitWeb.prg<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:23.09375px;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\n\/*\n\nTAWaitWeb.prg\n\nThis is a class for Fivewin TWebView that retrieves data from the WebView in Sync mode.\nc)copyright 2023- charleskwonohjun@gmail.com ( Seoul, Korea )\n\n*\/\n\n#include &quot;fivewin.ch&quot;\n\nFUNCTION AWait_QuerySelector( oWeb, cQuery, nSecond )\n    LOCAL oFunc\n    LOCAL cReturn := &quot;&quot;\n\n    oFunc := TAWaitWeb():New( oWeb )    \n    oFunc:Query( cQuery, nSecond )\n\n    cReturn := oFunc:cReturn    \n\nRETURN cReturn \n\nFUNCTION AWait_QuerySelectAll( oWeb, cQuery, nSecond )\n    LOCAL oFunc\n    LOCAL cReturn := &quot;&quot;\n\n    oFunc := TAWaitWeb():New( oWeb )    \n    oFunc:QuerySelectAll( cQuery, nSecond )\n\n    cReturn := oFunc:cReturn    \n\nRETURN cReturn \n\n\nFUNCTION AWait_GetOuterHTML( oWeb, cSelector, nSecond )\n    LOCAL oFunc\n    LOCAL cReturn := &quot;&quot;\n\n    oFunc := TAWaitWeb():New( oWeb )\n    oFunc:getOuterHTML( cSelector, nSecond )\n\n    cReturn := oFunc:cReturn    \n\nRETURN cReturn \n\nFUNCTION AWait_SetValue( oWeb, cSelector, cValue )\n    LOCAL oFunc\n    \n    oFunc := TAWaitWeb():New( oWeb )\n    oFunc:SetValue( cSelector, cValue )    \n\nRETURN NIL\n\nFUNCTION AWait_Click( oWeb, cSelector )\n    LOCAL oFunc\n    \n    oFunc := TAWaitWeb():New( oWeb )\n    oFunc:Click( cSelector )\n\nRETURN NIL\n\n\nCLASS TAWaitWeb\n\n    DATA bOldBind\n    DATA oWeb\n    DATA cQuery\n    DATA nSecond\n\n    DATA cReturn \n\n    METHOD New( oWeb, cQuery, nSecond ) CONSTRUCTOR \n    METHOD GetBind( cJson, cCalls, ... )\n    METHOD Query( cQuery, nSecond )\n    METHOD QuerySelectAll( cQuery, nSecond )\n    \n    METHOD GetOuterHtml( cSelecter, nSecond )\n    METHOD Eval( cEval )\n    METHOD SetValue( cSelector, cValue )\n    METHOD Click( cSelector )\n    \nENDCLASS    \n\nMETHOD New( oWeb ) CLASS TAWaitWeb \n\n    ::oWeb := oWeb\n    ::oWeb:Bind( &quot;SendToFWH&quot; )   \n      \nRETURN Self\n\nMETHOD Query( cQuery, nSecond, cReturn ) CLASS TAWaitWeb \n    LOCAL nCounter := 0\n    LOCAL lReturn  := .f.\n    LOCAL cEval    := &quot;SendToFWH($QUERY$, 'WebFunc')&quot;\n    LOCAL nStartSec := GetTickCount()\n\n    DEFAULT nSecond := 500\n    \n    ::bOldBind := ::oWeb:bOnBind\n    ::oWeb:bOnBind := { | cJson, cCalls, ... | ::GetBind( cJson, cCalls, ... ) }\n\n    cEval := STRTRAN( cEval, &quot;$QUERY$&quot;, cQuery ) \n   \n    ::cReturn := &quot;&quot;\n\n    WHILE .T.\n        ::oWeb:Eval( cEval )\n\n        sleep(100)\n        SysWait()\n       \n        IF !EMPTY( ::cReturn )\n            lReturn := .t.\n            EXIT\n        ENDIF    \n\n        IF GetTickCount() - nStartSec  &gt;= nSecond\n           EXIT\n        ENDIF\n    ENDDO   \n\n    cReturn := ::cReturn\n\n    ::oWeb:bOnBind := ::bOldBind\n\nRETURN lReturn\n\nMETHOD QuerySelectAll( cQuery, nSecond, cReturn ) CLASS TAWaitWeb \n    LOCAL nCounter := 0\n    LOCAL lReturn  := .f.\n    LOCAL cEval    := &quot;SendToFWH(querySelectorAll($QUERY$), 'WebFunc')&quot;\n    LOCAL nStartSec := GetTickCount()\n\n    DEFAULT nSecond := 500\n    \n    ::bOldBind := ::oWeb:bOnBind\n    ::oWeb:bOnBind := { | cJson, cCalls, ... | ::GetBind( cJson, cCalls, ... ) }\n\n    cEval := STRTRAN( cEval, &quot;$QUERY$&quot;, cQuery ) \n   \n    ::cReturn := &quot;&quot;\n\n    WHILE .T.\n        ::oWeb:Eval( cEval )\n\n        sleep(100)\n        SysWait()\n       \n        IF !EMPTY( ::cReturn )\n           lReturn := .t.\n           EXIT\n        ENDIF    \n\n        IF GetTickCount() - nStartSec  &gt;= nSecond\n           EXIT\n        ENDIF    \n    ENDDO   \n\n    cReturn := ::cReturn\n\n    ::oWeb:bOnBind := ::bOldBind\n    \nRETURN lReturn\n\n\nMETHOD GetOuterHtml( cSelecter, nSecond ) CLASS TAWaitWeb \n    LOCAL cQuery := &quot;SendToFWH( document.querySelector('$SELECTER$').outerHTML, 'savehtml')&quot;\n    LOCAL cEval\n    LOCAL nStartSec := GetTickCount()\n    LOCAL lReturn  := .f.\n\n    DEFAULT nSecond := 500\n\n    ::bOldBind := ::oWeb:bOnBind\n    ::oWeb:bOnBind := { | cJson, cCalls, ... | ::GetBind( cJson, cCalls, ... ) }\n\n    cEval := STRTRAN( cQuery , &quot;$SELECTER$&quot;, cSelecter )\n    \n    ::cReturn := &quot;&quot;\n\n    WHILE .T.\n        ::oWeb:Eval( cEval )\n\n        sleep(100)\n        SysWait()        \n\n        IF !EMPTY( ::cReturn )\n           lReturn := .t.\n           EXIT\n        ENDIF    \n\n        IF GetTickCount() - nStartSec  &gt;= nSecond\n           EXIT\n        ENDIF  \n    ENDDO      \n        \n    ::oWeb:bOnBind := ::bOldBind\n    \nRETURN lReturn\n\n\nMETHOD GetBind( cJson, cCalls, ... ) CLASS TAWaitWeb \n    LOCAL hResponse := hash()\n    \n    hb_jsondecode(cJson ,@hResponse )\n    \n    ::cReturn := &quot;&quot;\n\n    IF LEN( hResponse ) &gt;= 1\n       ::cReturn := hResponse[1]     \n    ENDIF   \n\nRETURN NIL\n\n\nMETHOD Eval( cEval ) CLASS TAWaitWeb \n\n    ::oWeb:Eval( cEval )\n\nRETURN NIL\n\nMETHOD SetValue( cSelector, cValue ) CLASS TAWaitWeb \n    LOCAL cEval := &quot;&quot;\n\n    cEval := &quot;document.querySelector('$SELECTOR$').value = '$VALUE$'&quot;\n    cEval := STRTRAN( cEval, &quot;$SELECTOR$&quot;, cSelector )\n    cEval := STRTRAN( cEval, &quot;$VALUE$&quot;, cValue )    \n    \n    ::Eval( cEval )\n\nRETURN NIL\n\nMETHOD Click( cSelector ) CLASS TAWaitWeb \n    LOCAL cEval := &quot;&quot;\n\n    cEval := &quot;document.querySelector('$SELECTOR$').click()&quot;\n    cEval := STRTRAN( cEval, &quot;$SELECTOR$&quot;, cSelector )\n    \n    \n    ::Eval( cEval )\n\nRETURN NIL\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/*<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">TAWaitWeb.prg<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">This is a class for Fivewin TWebView that retrieves data from the WebView in Sync mode.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">c)copyright 2023- charleskwonohjun@gmail.com ( Seoul, Korea )<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">*\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #5E81AC; font-weight: bold\">#<\/span><span style=\"color: #81A1C1\">include<\/span><span style=\"color: #8FBCBB\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">fivewin.ch<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">FUNCTION <\/span><span style=\"color: #88C0D0\">AWait_QuerySelector<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL oFunc<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">TAWaitWeb<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">:<\/span><span style=\"color: #88C0D0\">New<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc:<\/span><span style=\"color: #88C0D0\">Query<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> oFunc:cReturn    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN cReturn <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">FUNCTION <\/span><span style=\"color: #88C0D0\">AWait_QuerySelectAll<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL oFunc<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">TAWaitWeb<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">:<\/span><span style=\"color: #88C0D0\">New<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc:<\/span><span style=\"color: #88C0D0\">QuerySelectAll<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> oFunc:cReturn    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN cReturn <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">FUNCTION <\/span><span style=\"color: #88C0D0\">AWait_GetOuterHTML<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cSelector<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL oFunc<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">TAWaitWeb<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">:<\/span><span style=\"color: #88C0D0\">New<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc:<\/span><span style=\"color: #88C0D0\">getOuterHTML<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cSelector<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> oFunc:cReturn    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN cReturn <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">FUNCTION <\/span><span style=\"color: #88C0D0\">AWait_SetValue<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cSelector<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cValue <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL oFunc<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">TAWaitWeb<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">:<\/span><span style=\"color: #88C0D0\">New<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc:<\/span><span style=\"color: #88C0D0\">SetValue<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cSelector<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cValue <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN NIL<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">FUNCTION <\/span><span style=\"color: #88C0D0\">AWait_Click<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cSelector <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL oFunc<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">TAWaitWeb<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">:<\/span><span style=\"color: #88C0D0\">New<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    oFunc:<\/span><span style=\"color: #88C0D0\">Click<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cSelector <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN NIL<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">CLASS TAWaitWeb<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    DATA bOldBind<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    DATA oWeb<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    DATA cQuery<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    DATA nSecond<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    DATA cReturn <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    METHOD <\/span><span style=\"color: #88C0D0\">New<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> CONSTRUCTOR <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    METHOD <\/span><span style=\"color: #88C0D0\">GetBind<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">...<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    METHOD <\/span><span style=\"color: #88C0D0\">Query<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    METHOD <\/span><span style=\"color: #88C0D0\">QuerySelectAll<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    METHOD <\/span><span style=\"color: #88C0D0\">GetOuterHtml<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cSelecter<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    METHOD <\/span><span style=\"color: #88C0D0\">Eval<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    METHOD <\/span><span style=\"color: #88C0D0\">SetValue<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cSelector<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cValue <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    METHOD <\/span><span style=\"color: #88C0D0\">Click<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cSelector <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">ENDCLASS    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">METHOD <\/span><span style=\"color: #88C0D0\">New<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> oWeb <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> CLASS TAWaitWeb <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::oWeb :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> oWeb<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::oWeb:<\/span><span style=\"color: #88C0D0\">Bind<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SendToFWH<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN Self<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">METHOD <\/span><span style=\"color: #88C0D0\">Query<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cReturn <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> CLASS TAWaitWeb <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL nCounter :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL lReturn  :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .f.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL cEval    :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SendToFWH($QUERY$, &#39;WebFunc&#39;)<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL nStartSec :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GetTickCount<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    DEFAULT nSecond :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">500<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::bOldBind :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::oWeb:bOnBind<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::oWeb:bOnBind :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> ... <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">::GetBind<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> ... <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">STRTRAN<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$QUERY$<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cQuery <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    WHILE .T.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ::oWeb:<\/span><span style=\"color: #88C0D0\">Eval<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">sleep<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">100<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">SysWait<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        IF <\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #88C0D0\">EMPTY<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> ::cReturn <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            lReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .t.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ENDIF    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        IF <\/span><span style=\"color: #88C0D0\">GetTickCount<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> nStartSec  <\/span><span style=\"color: #81A1C1\">&gt;=<\/span><span style=\"color: #D8DEE9FF\"> nSecond<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">           EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ENDIF<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ENDDO   <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::cReturn<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::oWeb:bOnBind :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::bOldBind<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN lReturn<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">METHOD <\/span><span style=\"color: #88C0D0\">QuerySelectAll<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cQuery<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cReturn <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> CLASS TAWaitWeb <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL nCounter :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL lReturn  :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .f.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL cEval    :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SendToFWH(querySelectorAll($QUERY$), &#39;WebFunc&#39;)<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL nStartSec :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GetTickCount<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    DEFAULT nSecond :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">500<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::bOldBind :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::oWeb:bOnBind<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::oWeb:bOnBind :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> ... <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">::GetBind<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> ... <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">STRTRAN<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$QUERY$<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cQuery <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    WHILE .T.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ::oWeb:<\/span><span style=\"color: #88C0D0\">Eval<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">sleep<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">100<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">SysWait<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        IF <\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #88C0D0\">EMPTY<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> ::cReturn <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">           lReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .t.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">           EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ENDIF    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        IF <\/span><span style=\"color: #88C0D0\">GetTickCount<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> nStartSec  <\/span><span style=\"color: #81A1C1\">&gt;=<\/span><span style=\"color: #D8DEE9FF\"> nSecond<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">           EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ENDIF    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ENDDO   <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::cReturn<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::oWeb:bOnBind :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::bOldBind<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN lReturn<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">METHOD <\/span><span style=\"color: #88C0D0\">GetOuterHtml<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cSelecter<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> nSecond <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> CLASS TAWaitWeb <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL cQuery :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SendToFWH( document.querySelector(&#39;$SELECTER$&#39;).outerHTML, &#39;savehtml&#39;)<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL cEval<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL nStartSec :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">GetTickCount<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL lReturn  :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .f.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    DEFAULT nSecond :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">500<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::bOldBind :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::oWeb:bOnBind<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::oWeb:bOnBind :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> ... <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">::GetBind<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> ... <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">STRTRAN<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cQuery <\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$SELECTER$<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cSelecter <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    WHILE .T.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ::oWeb:<\/span><span style=\"color: #88C0D0\">Eval<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">sleep<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">100<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">SysWait<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">        <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        IF <\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #88C0D0\">EMPTY<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> ::cReturn <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">           lReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> .t.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">           EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ENDIF    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        IF <\/span><span style=\"color: #88C0D0\">GetTickCount<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> nStartSec  <\/span><span style=\"color: #81A1C1\">&gt;=<\/span><span style=\"color: #D8DEE9FF\"> nSecond<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">           EXIT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        ENDIF  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ENDDO      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::oWeb:bOnBind :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> ::bOldBind<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN lReturn<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">METHOD <\/span><span style=\"color: #88C0D0\">GetBind<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cCalls<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">...<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> CLASS TAWaitWeb <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL hResponse :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">hash<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">hb_jsondecode<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">cJson <\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\">@hResponse <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    IF <\/span><span style=\"color: #88C0D0\">LEN<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> hResponse <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">&gt;=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">       ::cReturn :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> hResponse<\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #D8DEE9FF\">     <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ENDIF   <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN NIL<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">METHOD <\/span><span style=\"color: #88C0D0\">Eval<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> CLASS TAWaitWeb <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::oWeb:<\/span><span style=\"color: #88C0D0\">Eval<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN NIL<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">METHOD <\/span><span style=\"color: #88C0D0\">SetValue<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cSelector<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cValue <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> CLASS TAWaitWeb <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">document.querySelector(&#39;$SELECTOR$&#39;).value = &#39;$VALUE$&#39;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">STRTRAN<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$SELECTOR$<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cSelector <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">STRTRAN<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$VALUE$<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cValue <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::<\/span><span style=\"color: #88C0D0\">Eval<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN NIL<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">METHOD <\/span><span style=\"color: #88C0D0\">Click<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cSelector <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> CLASS TAWaitWeb <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    LOCAL cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">document.querySelector(&#39;$SELECTOR$&#39;).click()<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    cEval :<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">STRTRAN<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">$SELECTOR$<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> cSelector <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ::<\/span><span style=\"color: #88C0D0\">Eval<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\"> cEval <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">RETURN NIL<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Manual<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><br>Introduction<\/p>\n\n\n\n<p>TAWaitWeb is a class designed for interacting with web elements within a TWebView control in a synchronous manner. It facilitates actions like querying, clicking, and modifying values of web elements. This manual provides an in-depth explanation of the class structure, methods, and their usage.<\/p>\n\n\n\n<p>Class Definition<br>Class Name: TAWaitWeb<br>Class Purpose<br>The TAWaitWeb class enables developers to perform various actions on web elements within a TWebView control. It encapsulates JavaScript evaluations to ensure synchronous behavior and provides methods for different interactions with web elements.<\/p>\n\n\n\n<p>Class Members<br>DATA bOldBind: A member variable to store the previous state of the binding status of the TWebView control.<br>DATA oWeb: A member variable to hold the TWebView control instance.<br>DATA cQuery: A member variable to store the query used for web element selection.<br>DATA nSecond: A member variable to define a timeout in milliseconds for waiting.<br>DATA cReturn: A member variable to store the response or result of actions performed within the class.<br><br>Constructor Method<br><strong>Method Name: New( oWeb )<\/strong><br>Purpose: Initializes an instance of the TAWaitWeb class.<\/p>\n\n\n\n<p>Parameters:<\/p>\n\n\n\n<p>oWeb: The TWebView control instance to be used for interactions.<br>Usage:<\/p>\n\n\n\n<p>Action Methods<br><strong>Method Name: Query( cQuery, nSecond )<\/strong><br>Purpose: Performs a query on a web element using the provided selector and waits for a response.<\/p>\n\n\n\n<p>Parameters:<\/p>\n\n\n\n<p>cQuery: The CSS selector for the web element to be queried.<br>nSecond: (Optional) The timeout in milliseconds for waiting.<br><br><strong>Method Name: QuerySelectAll( cQuery, nSecond )<\/strong><br>Purpose: Performs a query to select multiple web elements using the provided selector and waits for a response.<\/p>\n\n\n\n<p>Parameters:<\/p>\n\n\n\n<p>cQuery: The CSS selector for the web elements to be queried.<br>nSecond: (Optional) The timeout in milliseconds for waiting.<\/p>\n\n\n\n<p><strong>Method Name: GetOuterHtml( cSelector, nSecond )<\/strong><br>Purpose: Retrieves the outer HTML of a web element using the provided selector and waits for a response.<\/p>\n\n\n\n<p>Parameters:<\/p>\n\n\n\n<p>cSelector: The CSS selector for the web element.<br>nSecond: (Optional) The timeout in milliseconds for waiting.<\/p>\n\n\n\n<p><strong>Method Name: SetValue( cSelector, cValue )<\/strong><br>Purpose: Sets a value on a specific web element using the provided selector.<\/p>\n\n\n\n<p>Parameters:<\/p>\n\n\n\n<p>cSelector: The CSS selector for the web element.<br>cValue: The value to be set on the web element.<\/p>\n\n\n\n<p><strong>Method Name: Click( cSelector )<\/strong><br>Purpose: Simulates a click action on a specific web element using the provided selector.<\/p>\n\n\n\n<p>Parameters:<\/p>\n\n\n\n<p>cSelector: The CSS selector for the web element to be clicked.<\/p>\n\n\n\n<p>Utility Methods<br><strong>Method Name: GetBind( cJson, cCalls, \u2026 )<\/strong><br>Purpose: Decodes JSON responses and sets the cReturn member variable.<\/p>\n\n\n\n<p>Parameters:<\/p>\n\n\n\n<p>cJson: The JSON response to be decoded.<br>cCalls: Additional parameters.<br>Usage: This method is used internally by other methods and doesn&#8217;t require direct user interaction.<\/p>\n\n\n\n<p><strong>Method Name: Eval( cEval )<\/strong><br>Purpose: Evaluates JavaScript code within the TWebView control.<\/p>\n\n\n\n<p>Parameters:<\/p>\n\n\n\n<p>cEval: The JavaScript code to be evaluated.<br>Usage: This method is used internally by other methods and doesn&#8217;t require direct user interaction.<\/p>\n\n\n\n<p><strong>Conclusion<\/strong><br>The TAWaitWeb class offers a comprehensive way to interact with web elements within a TWebView control using various action methods. Developers can use this class to perform queries, clicks, and value modifications on web elements, ensuring synchronous behavior. By following the provided usage examples, developers can easily integrate the TAWaitWeb class into their FiveWin projects and enhance their interactions with web elements.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Using the DOM allows you to access a website and automatically log in.It can also automatically insert values&#8230;<\/p>\n","protected":false},"author":1,"featured_media":936,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kadence_starter_templates_imported_post":true,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-935","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technique-productivity"],"taxonomy_info":{"category":[{"value":4,"label":"Technique"}]},"featured_image_src_large":["https:\/\/www.charleskwon.com\/wp-content\/uploads\/2023\/08\/image-6.png",798,903,false],"author_info":{"display_name":"CharlesKWON","author_link":"https:\/\/www.charleskwon.com\/?author=1"},"comment_info":0,"category_info":[{"term_id":4,"name":"Technique","slug":"technique-productivity","term_group":0,"term_taxonomy_id":4,"taxonomy":"category","description":"","parent":0,"count":8,"filter":"raw","cat_ID":4,"category_count":8,"category_description":"","cat_name":"Technique","category_nicename":"technique-productivity","category_parent":0}],"tag_info":false,"_links":{"self":[{"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/posts\/935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=935"}],"version-history":[{"count":4,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/posts\/935\/revisions"}],"predecessor-version":[{"id":946,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/posts\/935\/revisions\/946"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=\/wp\/v2\/media\/936"}],"wp:attachment":[{"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.charleskwon.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}