4

※ 最下部にIE版の検討について、追記しました。

 

主にIE以外のブラウザ向けです。
【ファイルを選択】【参照...】ボタンに最適なライブラリは「ファイル選択」、という情報です。
ほぼマスターできたのでお裾分けです。
究極かどうか、タイトルがJAROってないか、もっとスマートな方法等、お気づきの点をお知らせいただけると嬉しいです。
カンタンに靡きます。

 

対象

このボタン。

このタグ。

<input type="file" ~>

 

動き

ヒューマンリソシアRPA 公式YouTubeチャンネル
ライブラリ全部使ってみた。
【WinActorライブラリ】457本ノック!
第39弾
357本目
【 23_ブラウザ関連】その1
https://youtu.be/zx_CS2GIbKw?t=778

ブラウザ関連 > ファイル選択

少なくとも動画を作ったかたはご存じだった。
もちろんライブラリを作ったかたも。
最下部に引用したスレッドをご覧になってたら、「『ファイル選択』を使えばいいのに、、」ともどかしく感じていたに違いない。
これからもハマるかたがいるはず。

 

フィットするXPathの主なスタイル

  • //input[@type="file" and @name="aaa"]
  • //input[@id="aaa"]

 

体験できる主なリファレンスサイト

<input type="file"> - HTML: HyperText Markup Language | MDN
https://developer.mozilla.org/ja/docs/Web/HTML/Element/input/file

input type="file"でファイルをアップロードする方法|HTMLリファレンス
https://code-kitchen.dev/html/input-file/

<INPUT type="file">-HTMLタグリファレンス
http://www.htmq.com/html/input_file.shtml

HTML5/フォーム/input要素 ファイルの送信欄を作る - TAG index
https://www.tagindex.com/html5/form/input_file.html

Firefoxでは【参照...】ボタンとのこと

IEとかSafariからの見えかたも見つけました。

<input type="file">タグ 「ファイルのアップロード」 【HTMLリファレンス】
https://web-designer.cman.jp/html_ref/abc_list/input_file/

「ブラウザによって表示が異なります。画面イメージを確認」の部分

ここのユーザーフォーラムの投稿画面、「画像を挿入する」で開く「アップロードする画像を選択」ダイアログにも【ファイルを選択】ボタンがあります。

 

テストに使ったパーツ構成

ブラウザ起動:chrome
ページ表示:https://www.tagindex.com/html5/form/input_file.html
End
PageUp
PageUp
PageUp
ファイル選択:C:\rpa\test.txt

わたしのディスプレイでは、間にこのエミュレーションを挟むことで、「ファイル選択」が働くゲンバをモクゲキできました。

 

複数ファイルの選択

今回の投稿にあたって学んだメインがここ
頻度や実用性はともかく
テストで使ったTAG Indexのページ内、「multiple属性を指定した例」

手動では複数ファイルを選択できる
WinActorからはどうやるんだろう
ファイル名を区切り文字で繋いで並べても機能せず、、

  • カンマ
  • スペース
  • タブ
  • コロン
  • セミコロン

いずれも「invailed argument」な旨のエラー、、
ファイル名の指定方法が間違ってる模様
ファイル選択を直列で並べても1ファイルが差し替わるのみ、、

配列にして放り込んだりすれば、複数ファイルを選択できるのだろうか、、

複数ファイルの選択方法をご存知のかた、教えてください。
これを機にトライしたら、「この手でダメだった」の情報も恥をかき捨てて惜しげもなくご披露いただけると幸いです。

、、と書いてる間に、まんまと成功しました。

 

複数ファイル選択のステップ

  1. files.txtに改行区切りのファイルフルパスのリストを用意
  2. 「テキストファイル読込」でfiles.txtを読み込み、変数[ファイル]にリストを格納
  3. 「ファイル選択」のファイル名に変数[ファイル]をセット
  4. 実行したら、ファイル名が反映される箇所にファイル数が反映

 

手法の比較

究極のファイル選択

ファイル選択 ※ 値の設定(入力再現)も同じ用途に使える

  • ◎ 1パーツ
  • ◎ 一瞬(99点)
  • ◎ 躓くポイント見当たらず

セオリー通りの攻めかた(ユーザーフォーラムでもメジャーな方法)

クリック
文字列設定(WIN32):ファイル名(フルパス)
クリック(WIN32):開く

  • 〇 3パーツ
  • 〇 2秒以下(80点)
  • ▲ 対象コントロール設定で苦戦しがち
  • ※ UI Automationでは、確か開くとか保存は制御できなかったはず
    「空のウィンドウタイトル」とかサイズだけのダミーの識別名で掴めば何とかなるのだろうか

チカラ技の攻めかた

クリップボード:値の設定、ファイル名(フルパス)
クリック
Ctrl+V:ファイル名(フルパス)
Enter:開く

  • 〇 4パーツ(エミュレーションをマージすれば3パーツ)
  • 〇 2~3秒程度(70点)
  • ▲ Ver.7系で、クリップボードは躓きがち
  • ▲ タイミングに気を遣いがち

 

値の設定(入力再現)相当の手法のリファレンス

Python+Selenium ファイル選択ボタンにファイルパスをセットする(ファイル選択ダイアログがポップアップする) | まるむしアンテナ
https://antenna.infomixer.net/2020/09/24/pythonselenium-ファイル選択ボタンにファイルパスをセット/

Seleniumでファイルがアップロードできない時の対処法 | ダーフク.com
https://www.dafuku.com/2014/12/selenium-file-upload.html

[Q&A] find_element_by_idで要素を取得できない。 - Qiita
https://qiita.com/takaekokaz/questions/6fe1187aab51eff91a84

 

「invailed argument」でヒットする同じノウハウ

Drivers should throw "invalid argument" error on an attempt to click file input · Issue #4843 · SeleniumHQ/selenium · GitHub
https://github.com/SeleniumHQ/selenium/issues/4843

CSV - jupyter laboで、CSVファイルのアップロードをしたいです。|teratail
https://teratail.com/questions/281662

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: File not found error while uploading file using Selenium Python - Stack Overflow
https://stackoverflow.com/questions/62312304/selenium-common-exceptions-invalidargumentexception-message-invalid-argument

 

関連スレッド

https://winactor.com/questions/question/ブラウザで、『ファイルを指定して開く』ダイア/

https://winactor.com/questions/question/chromeで指定フォルダからcsvファイルを開いてアップロ/

https://winactor.com/questions/question/ブラウザ操作の「次のウィンドウでへ移動」で移/

このスレッド↓の事後に調べて、値の設定(入力再現)相当の手法のリファレンスを見つけ、「ファイル選択」ライブラリの存在と機能に気づきました。

https://winactor.com/questions/question/chrome-のクリックについて/

 

 

IE版も検討してみました。
同じように、inputに対して文字を送りつければ、ダイアログを扱わなくて済みそうな予感です。
まだクリアできていません。
どうすればクリアできるでしょうか。

 

参考にしたサイト

VBAでIE操作「SendKeys(キーボード入力)で無理やり突破する」 | VBA Create
https://vba-create.jp/vba-ie-sendkey-forcibly/

 

ベースライブラリ候補

  • IE操作(指定タグの指定ID内のテキストを取得)

 

加工箇所

  1. コメントアウト
    'hitText = element.innerText
    'Call SetUMSVariable($取得文字$, hitText)
     
  2. 代わりに追記
    'objIE.Document.getElementsByClassName("search-edit")(0).Focus
    element.Focus
    '■SendKeysでポップアップに対してキーボード操作を行う
    Set wsh = CreateObject("WScript.Shell")
    With wsh
      .SendKeys !ファイル名!
      .SendKeys "{ENTER}"
    End With

 

実行結果

何事もなかったように素通りする、、

 

加工後の命名候補

  • IE操作(指定タグの指定ID内にテキストを入力)
Zawawa 回答した質問
回答とコメントは、会員登録(無料)で閲覧できるようになります。