Jump to content

I can't activate the "File Open" window on Chrome and Edge


Recommended Posts

Hi, I'm trying to upload a file with a web browser but I can't select the Open File window to select the file that I want to upload.

TL;DR I can't handle the Open File window of Chrome and MS Edge. AutoIt just doesn't find it by its title (in Firefox yes, but not on Chrome and MS Edge).

With another software (Selenium Webdriver in Python) I access to a web page with a common HTML5 file uploader and I click on it, but when the Open File window comes up, I want to select a file and press Enter (write the filepath that I give and press Enter key or Open button).

I have the idea, and I have the script on AutoIt too... but it doesn't work on Windows Edge and Chrome, only works on Firefox and Pale Moon (who are basically the same).

Here is my code:

#include <MsgBoxConstants.au3>
$title = "Abrir" ; My Windows is in spanish, but I guess it's "Open" in English and it's the same code
WinActivate($title)
If WinActive($title) Then
    send("C:\Users\myuser\images\my_image.jpg")
    Send("{ENTER}")
Else
    MsgBox($MB_SYSTEMMODAL, "WinActive", "Window not found.")
EndIf

In Firefox (and Pale Moon) the Open File window comes up, the file path is written and the Enter key is pressed. It works perfect.

In Chrome and Edge, I never see the Open File window on top... and I neither see "Window not found" message (seems like AutoIt finds it but doesn't send keys).

Edit: before to send this post, I started thinking again and... after several tests, I discovered one thing: when you select the window, in Firefox (and Pale Moon) the cursor goes to the combobox (where I have to put the text) and it's possible to write just after clicking (or opening, what in AutoIt it is "Activate" I guess) the window but in Chrome and Edge it isn't like that, when you click the window, the cursor doesn't go to the combobox.

With that "discovery", I tried to select the combobox but... I failed again. And now I have no idea how to go ahead.

#include <MsgBoxConstants.au3>
$title = "Abrir"
WinActivate($title)
If WinActive($title) Then
    ControlClick($title, "", 1148) ; Still it does not work
    send("C:\Users\myuser\images\my_image.jpg")
    Send("{ENTER}")
Else
    MsgBox($MB_SYSTEMMODAL, "WinActive", "Window not found.")
EndIf

 

Edited by Rhazz
Link to post
Share on other sites
On 2/8/2016 at 7:37 AM, PACaleala said:

My cat asked :" Did Rhazz try Control - o " ?

Sorry mate, but I don't understand.

Control+O opens the "File Open" window... but I'm asking about how to use that window on Chrome and Edge, where at the moment I can't find this window (I mean handle with AutoIt), to write the file directory and use the open button.

AutoIt just doesn't find the window by its title, and so I can't use it.

Link to post
Share on other sites

Hello. Hola

 

Probably something like this could do the trick.

 

#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Process.au3>
#include <Misc.au3>
#include <WinAPIProc.au3>
#include <Array.au3>
Global $hDLL, $hWinEventProc, $hHook

HotKeySet("{ESC}", "_HotKey") ; Exit


MsgBox(0,"How To Use:","Just Open A Chrome Tab Press CTRL+O And you will get a File Loaded",5)

Global Const $sFile=@DesktopDir & "\DemoFile.txt"
FileWrite($sFile,"Hola Soy Danyfirex")

Global Const $EVENT_SYSTEM_DIALOGSTART = 0x0010 ;An MSAA event indicating that a dialog box was displayed.

Global $EVENT_Min = $EVENT_SYSTEM_DIALOGSTART
Global $EVENT_Max = $EVENT_SYSTEM_DIALOGSTART

$hDLL = DllOpen("User32.dll")
$hWinEventProc = DllCallbackRegister("_WinEventProc", "none", "hwnd;int;hwnd;long;long;int;int")
If Not @error Then
    OnAutoItExitRegister("OnAutoItExit")
Else
    MsgBox(16 + 262144, "Error", "DllCallbackRegister(_WinEventProc) did not succeed.")
    Exit
EndIf


$hHook = _SetWinEventHook($EVENT_Min, $EVENT_Max, $hDLL)


While 1
    Sleep(10)
WEnd



Func _WinEventProc($hHook, $iEvent, $hWnd, $idObject, $idChild, $iEventThread, $iEventTime)
    Local $PID = WinGetProcess($hWnd)
    Local $sEventProcName = _ProcessGetName($PID)

    If StringInStr(WinGetTitle($hWnd), "abrir") And $sEventProcName="chrome.exe" Then
        MsgBox(0,"Information","Google Chrome Dialog Detected" & @CRLF & _
        "Load A File For testing..." & @CRLF,3)
         ControlSetText($hWnd,"","Edit1",$sFile)
         ControlClick($hWnd,"","Button1")
    EndIf

EndFunc   ;==>_WinEventProc

Func _SetWinEventHook($iEventMin, $iEventMax, $hDLLUser32)

    Local $aRet=0
    Local Const $WINEVENT_OUTOFCONTEXT = 0x0
    Local Const $WINEVENT_SKIPOWNPROCESS = 0x2
    If Not $hDLLUser32 Or $hDLLUser32 = -1 Then $hDLLUser32 = "User32.dll"
    $aRet = DllCall($hDLLUser32, "hwnd", "SetWinEventHook", _
            "uint", $iEventMin, _
            "uint", $iEventMax, _
            "hwnd", 0, _
            "ptr", DllCallbackGetPtr($hWinEventProc), _
            "int", 0, _
            "int", 0, _
            "uint", BitOR($WINEVENT_OUTOFCONTEXT, $WINEVENT_SKIPOWNPROCESS))
    If @error Then Return SetError(@error, 0, 0)
    Return $aRet[0]
EndFunc   ;==>_SetWinEventHook

Func _HotKey()
    Switch @HotKeyPressed
        Case "{ESC}"
            Exit
    EndSwitch
EndFunc   ;==>_HotKey

Func OnAutoItExit()
    If $hWinEventProc Then
        DllCallbackFree($hWinEventProc)
    EndIf
    If $hHook Then DllCall("User32.dll", "int", "UnhookWinEvent", "hwnd", $hHook)
    If $hDLL Then DllClose($hDLL)
EndFunc   ;==>OnAutoItExit

 

Edit: This is for chrome. If you want to handle MS Edge Check line 45.

Saludos

Edited by Danyfirex
Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By goku200
      I am trying to change the settings of the print option to Save as PDF and its not changing the settings and clicking on the Save button at the bottom. Here is my script that I have written and the format is correct below. Chrome browser I'm using is 97.0 My script was working fine using Chrome 95.0\ Not sure why its not working now
      It finds the print-preview-app element but not the others.
       
    • By goku200
      I am trying to hit the Return key without having to use the Send keys. I have the following code and its not hitting the Return key. Am I missing something?
      ; Press Return $sAction = '{"actions":[{"type": "key", "id": "keyboard_1", "actions": [{"type": "keyDown", "value": "\uE006"},' ; Pause $sAction &= '{"type": "pause", "duration": 500},' ; Release Return $sAction &= '{"type": "keyUp", "value": "\uE006"}]}]}' _WD_Action($sSession, "actions", $sAction)  
    • By AutoitMike
      A process of mine opens a HML file, modifies it and then saves, closes it.
      I then need to run an.exe that opens this file right after this.. However, nothing that I find on this forum works that supposedly tests to see if the fie is still open, ready to be used by another process.
      Right now, I just Sleep(2000) .
      I would like something cleaner than this.
      This function, for example, returns False when nothing has it opened or if I open the file with notepad or any other editor.
      I am running on a win7 laptop, if that has any bearing.
      $File="C:\Utilities\test\report.hr5" MsgBox(0,"", _FileInUse($File)) Exit Func _FileInUse($sFilePath) ; By Nessie. Modified by guinness. Local Const $hFileOpen = _WinAPI_CreateFile($sFilePath, $CREATE_ALWAYS, $FILE_SHARE_WRITE) If $hFileOpen Then _WinAPI_CloseHandle($hFileOpen) Return False EndIf Local $fReturn = False If _WinAPI_GetLastError() = 32 Then $fReturn = True Return $fReturn EndFunc  
    • By goku200
      I'm having some issues with my script that's not grabbing the id from the cell and appending it to the url test that I have in my script.
      Here is my script:
      What I'm having issues is looping through the id column in the excel spreadsheet and adding 1 to the url address when its tabbed by using _WD_NewTab. When it goes to the browser I'm wanting it to display: https://127.0.0.1/test.html?id=1 press Enter and save the file as 1.html and so forth for the others. Not sure what I'm doing wrong here. 
       
    • By SkysLastChance
      How should I be attempting to click this link?

      <span id="x2m8_R-s" class="s_22 s-text">Walk&nbsp;In</span> If I double click the Walk$nbsp;In the text reads Walk In.

      How can I search for this text? 
      I have tried a several  different ways with no luck. Here are a few;
      $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, '//span[text()="Walk${nbsp}In"]') $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//span[translate(text(), '\u00a0', ' ') = 'Walk In']") $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//span[contains(text(),'Walk In')]") $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//span[contains(text(),'Walk&nbsp;In')]") Any help is appreciated as always. 
       
       
       
×
×
  • Create New...