millerbryan10 Posted September 4, 2013 Share Posted September 4, 2013 (edited) Hello everyone... As a last measure resort to my issue, I have signed up for these forums based on the great answers provided by the contributers when I get stuck using AutoIT. However, I am currently stuck on the following issue... I am trying to click a button on an IE page which is a file input type. The script below shows how I find the button on the page, move to it, and click it. $OCLECMDID_OPTICAL_ZOOM = 63 $OCLECMDID_CONTPROMPTUSER = 2 $oIE.execWB($OCLECMDID_OPTICAL_ZOOM, $OCLECMDID_CONTPROMPTUSER, 100) $oControl = _IEGetObjByName($oIE, "uploadFile") $MouseX = _IEPropertyGet ($oControl, "screenx") + _IEPropertyGet ($oControl, "width") - 10 $MouseY = _IEPropertyGet ($oControl, "screeny") + _IEPropertyGet ($oControl, "height") / 2 MouseMove ($MouseX, $MouseY) MouseClick ("left") WinWait ("Choose File to Upload") $hChoose = WinGetHandle ("Choose File to Upload") ControlSetText ($hChoose, "", "Edit1", "P:\" & @USERNAME & "\" & $file) Sleep(4000) ControlClick ($hChoose, "", "Button1") This will only work if the PC screen resolution is 1280 x 1024 or higher. I have tried the following code to no luck... $OCLECMDID_OPTICAL_ZOOM = 63 $OCLECMDID_CONTPROMPTUSER = 2 $oIE.execWB($OCLECMDID_OPTICAL_ZOOM, $OCLECMDID_CONTPROMPTUSER, 100) $oIE.document.parentwindow.scroll(0, $oIE.document.body.scrollHeight) $oControl = _IEGetObjByName($oIE, "uploadFile") $MouseX = _IEPropertyGet ($oControl, "screenx") + _IEPropertyGet ($oControl, "width") - 10 $MouseY = _IEPropertyGet ($oControl, "screeny") + _IEPropertyGet ($oControl, "height") / 2 MouseMove ($MouseX, $MouseY) MouseClick ("left") WinWait ("Choose File to Upload") $hChoose = WinGetHandle ("Choose File to Upload") ControlSetText ($hChoose, "", "Edit1", "P:\" & @USERNAME & "\" & $file) Sleep(4000) ControlClick ($hChoose, "", "Button1") My assumption was that it would recalculate where the element was after scrolling down, which was not true. Basically, the element is not visible to be clicked unless it is visible on the screen, without scrolling. 1. What I would like to do is to basically scroll down the page and still be able to find the element and click it 2. Changing resolutions is not an option as our users can set their own resolution sizes 3. I have it set to automatically change the zoom of teh webpage to 100% (as shown above) 4. Any help would be greatly appreciated. Thank you! Bryan Edited September 4, 2013 by millerbryan10 Link to comment Share on other sites More sharing options...
mLipok Posted September 4, 2013 Share Posted September 4, 2013 welcome to the forum next time try to use advanced search http://www.autoitscript.com/forum/index.php?app=core&module=search&search_in=forums but the best answer you can found here: more precisely it is here: Signature beginning:* Please remember: "AutoIt"..... * Wondering who uses AutoIt and what it can be used for ? * Forum Rules ** ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Code * for other useful stuff click the following button: Spoiler Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API * ErrorLog.au3 UDF - A logging Library * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 * My contribution to others projects or UDF based on others projects: * _sql.au3 UDF * POP3.au3 UDF * RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF * SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane * Useful links: * Forum Rules * Forum etiquette * Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * Wiki: * Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX IE Related: * How to use IE.au3 UDF with AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler * IE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related: * How to get reference to PDF object embeded in IE * IE on Windows 11 * I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions * EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *I also encourage you to check awesome @trancexx code: * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuff * OnHungApp handler * Avoid "AutoIt Error" message box in unknown errors * HTML editor * winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/ "Homo sum; humani nil a me alienum puto" - Publius Terentius Afer"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming" , be and \\//_. Anticipating Errors : "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty." Signature last update: 2023-04-24 Link to comment Share on other sites More sharing options...
trancexx Posted September 4, 2013 Share Posted September 4, 2013 ^^ That's the code he uses.@millerbryan10, consider differen approach. Usually stuff like this can be done in much more sensible non-IE fashion.If you give the address of that page I, or smeone else, can show you how to do what you want using simple WinHttp code. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
millerbryan10 Posted September 4, 2013 Author Share Posted September 4, 2013 @mlipok ... the code you sent me is the same that I was using. The issue is that the button which needs to be pressed is not visible when calling the function to click it based on it's position. Scrolling down to the object does not solve this either. I have also done the code below... $oControl = _IEGetObjByName($oIE, "uploadFile") _IEAction($oControl, "click") WinWait("Choose File to Upload") $hChoose = WinGetHandle("Choose File to Upload") ControlSetText($hChoose, "", "Edit1", "P:\" & @USERNAME & "\" & $file) Sleep(4000) ControlClick($hChoose, "", "Button1") While this does work (and I have seen this on other forums), it will click the button I need but pause the macro. I need it to click the macro and continue running the rest of the script. I have also tried what is below... $oControl = _IEGetObjById($oIE, "uploadFile") $iBrowserX = _IEPropertyGet($oControl, "browserx") $iBrowserY = _IEPropertyGet($oControl, "browsery") $iWidth = _IEPropertyGet($oControl, "width") $iHeight = _IEPropertyGet($oControl, "height") ControlClick(_IEPropertyGet($oIE, "hwnd"), "", "", "left", 1, $iBrowserX + $iWidth/2, $iBrowserY + $iHeight/2) And this also gave me no luck. The webpage cannot be shared, but here is the string of code I am trying to interact with <input type="file" name="uploadFile" size="60" tabindex="11" id="UploadFile1" /> Link to comment Share on other sites More sharing options...
mLipok Posted September 4, 2013 Share Posted September 4, 2013 I'm sorry you're both right. I searched my own scripts. I found the way once I solved the problem. The possibility that it will be useful. Once, in my case it helped something like this: $oControl = _IEGetObjByName($oIE, "uploadFile") _IEAction($oControl, 'focus') Send("{SPACE}") Then using WinWait waiting for the appropriate file selection window. Signature beginning:* Please remember: "AutoIt"..... * Wondering who uses AutoIt and what it can be used for ? * Forum Rules ** ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Code * for other useful stuff click the following button: Spoiler Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API * ErrorLog.au3 UDF - A logging Library * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 * My contribution to others projects or UDF based on others projects: * _sql.au3 UDF * POP3.au3 UDF * RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF * SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane * Useful links: * Forum Rules * Forum etiquette * Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * Wiki: * Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX IE Related: * How to use IE.au3 UDF with AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler * IE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related: * How to get reference to PDF object embeded in IE * IE on Windows 11 * I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions * EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *I also encourage you to check awesome @trancexx code: * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuff * OnHungApp handler * Avoid "AutoIt Error" message box in unknown errors * HTML editor * winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/ "Homo sum; humani nil a me alienum puto" - Publius Terentius Afer"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming" , be and \\//_. Anticipating Errors : "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty." Signature last update: 2023-04-24 Link to comment Share on other sites More sharing options...
trancexx Posted September 5, 2013 Share Posted September 5, 2013 (edited) The webpage cannot be shared, but here is the string of code I am trying to interact with<input type="file" name="uploadFile" size="60" tabindex="11" id="UploadFile1" />Form identifier is missing for precise code but it would be something like this:expandcollapse popup#include "WinHttp.au3" Global Const $sAddress = "http://some.server.com/folder_there/upload.asp" ; set correct address ; $file = ... ; from the rest of your code Local $sHTML = UploadYourFile($sAddress, "P:\" & @USERNAME & "\" & $file) ConsoleWrite("!ERROR = " & @error & @CRLf) ConsoleWrite($sHTML & @CRLf) Func UploadYourFile($sSiteAddress, $sFile) ; Disassemble the address Local $aAddress = _WinHttpCrackUrl($sSiteAddress) If @error Then Return SetError(-1, 0,"") Local $sHost = $aAddress[2] Local $sURL = $aAddress[6] & $aAddress[7] ; Initialize and get session handle Local $hOpen = _WinHttpOpen() #cs ; Login here if you have to ; This is usually done by filling some form so it's first _WinHttpSimpleFormFill() ; When logged-on cookies are "saved" to $hOpen Local $hLoginConnect = _WinHttpConnect($hOpen, $sHost) Local $sLoginResult = _WinHttpSimpleFormFill($hLoginConnect, "/the_URL_of_the_page_with_login_form.asp", _ Default, _ ; you should set form id, name or index here if there are more than one forms on the login page "name:user_name", "You", _ ; for example "name:user_pwd", "YourPassword") ; for example ; Now you check @error to see if there were any problems and maybe inspect $sLoginResult to see if login was success ;... ; Close handles (don't close it if you will use it below) _WinHttpCloseHandle($hLoginConnect) ; $hOpen has cookies now #ce ; Get connection handle Local $hConnect = _WinHttpConnect($hOpen, $sHost) ; ...or use the one you have already if you executed login ; Local $hConnect = $hLoginConnect ; Fill the form Local $sHTML = _WinHttpSimpleFormFill($hConnect, $sURL, _ Default, _ ; you should set form id, name or index here if there are more than one forms on the page "name:uploadFile", $sFile) ; <- filling only this (the rest is left default) Local $iErr = @error ; collect error ; Close handles _WinHttpCloseHandle($hConnect) _WinHttpCloseHandle($hOpen) ; Return whatever the result Return SetError($iErr, 0, $sHTML) EndFuncedit: You can find WinHttp.au3 in examples forum. Edited September 5, 2013 by trancexx ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
millerbryan10 Posted September 10, 2013 Author Share Posted September 10, 2013 (edited) I resolved this issue - basically just ensured that the macro activated the IE window to ensure that it was active, and used "Send({"TAB"})" until I got to the field I needed and clicked Enter. Unfortunately, it looks as if there is no way for that button to be clicked without A. pausing the macro or B. using mouse-moves/clicks or keyboard sends. If anyone can find a way to do it without keyboard sends or mouse-clicks that does not pause the macro (to quote Bill Lumbergh) "that would be great" Edited September 10, 2013 by millerbryan10 Link to comment Share on other sites More sharing options...
mLipok Posted September 10, 2013 Share Posted September 10, 2013 with A you can use Adlib but I think i try this but this dont work Signature beginning:* Please remember: "AutoIt"..... * Wondering who uses AutoIt and what it can be used for ? * Forum Rules ** ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Code * for other useful stuff click the following button: Spoiler Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API * ErrorLog.au3 UDF - A logging Library * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 * My contribution to others projects or UDF based on others projects: * _sql.au3 UDF * POP3.au3 UDF * RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF * SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane * Useful links: * Forum Rules * Forum etiquette * Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * Wiki: * Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX IE Related: * How to use IE.au3 UDF with AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler * IE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related: * How to get reference to PDF object embeded in IE * IE on Windows 11 * I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions * EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *I also encourage you to check awesome @trancexx code: * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuff * OnHungApp handler * Avoid "AutoIt Error" message box in unknown errors * HTML editor * winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/ "Homo sum; humani nil a me alienum puto" - Publius Terentius Afer"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming" , be and \\//_. Anticipating Errors : "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty." Signature last update: 2023-04-24 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now