@yamaxzira

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

SeleniumでOutlookの添付ファイルを追加する方法

解決したいこと

SeleniumVBAでOutlookのWEB版を操作しようとしています。
その中で添付ファイルを追加しようとするとエラーが出てしまい追加することができません。
どなたか解決方法をご存じの方がいらっしゃいましたらご教授ください。

発生している問題・エラー

エラー内容:
CssSelecterで"input[type='file']"を指定しているのですが、恐らくこのCssがメール本文に画像を貼り付ける要素のためテキストファイルが添付できないのだと思います。

出ているエラーメッセージ:
「次のファイルは、サポートされている種類の画像ファイルではないため、挿入されませんでした。: sample.txt。サポートされている画像ファイルの種類は、.png、gif、.bmp、.jpg、.jpe、.jfif、.jpegです。」

outlookerror.jpg

該当するソースコード

VBA&SeleniumVBAを使用しています。

下記のプログラムの
attachfile.SendKeys "C:\Users****\Desktop\sample.txt"
の部分で発生します。

--- プログラム ---------------------------------------------
Dim driver As SeleniumVBA.WebDriver
Dim keys As SeleniumVBA.WebKeyboard
Dim elm As WebElement

Set driver = SeleniumVBA.New_WebDriver
Set keys = SeleniumVBA.New_WebKeyboard

With driver
.StartEdge
.OpenBrowser

.NavigateTo "https://outlook.com/owa/technopro.com"

.Wait 5000
Set elm = .FindElement(By.CssSelector, "button[aria-label='新規メール']")
elm.Click

.Wait 3000

Dim attachfile As WebElement

Set attachfile = Nothing
Set attachfile = .FindElement(By.CssSelector, "input[type='file']")
attachfile.SendKeys "C:\Users\yoshi\Desktop\sample.txt"	' ←ここでエラー発生します。

End With

挿入→添付ファイルタグを表示させてみても、別のinput[type='file']も見つからず。。。

0 likes

1Answer

自分のOWA環境ですと、

scr1.png scr2.png scr3.png

「新規メール」→「挿入」→「添付ファイル」→「このコンピュータから選択」をクリックすると、「ファイルを開くダイアログ」が表示されます。
このダイアログへの (添付ファイルの) パスの入力は、Seleniumでは出来ないと思います。

どういう入力を想定されているのか、質問者さんのスクショを添付することは可能でしょうか。

0Like

Comments

  1. @yamaxzira

    Questioner

    アドバイスありがとうございます。
    ご指摘の通り「ファイルを開くダイアログ」はWindowsのAPIだと思うのでSeleniumで操作するのは無理だと考えています。
    いくつかWebサイト等を調べると
    1.下記で添付ファイルのインプット要素を探す。
      Dim attachfile As WebElement
      Set attachfile = .FindElement(By.CssSelector, "input[type='file']")
    2.その要素にsendkeysで添付ファイルのパスを設定する。
      attachfile.SendKeys "C:\Users\yoshi\Desktop\sample.txt"
    で添付ファイルをすることは可能と書いてあるのですが、txtファイルだとこれがうまくできない状態です。
    上記を実行すると
    「次のファイルは、サポートされている種類の画像ファイルではないため、挿入されませんでした。: sample.txt。サポートされている画像ファイルの種類は、.png、gif、.bmp、.jpg、.jpe、.jfif、.jpegです。」
    のエラーが出てしまいます。ただし、エラーメッセージにしたがってjpegファイルを添付した場合、添付はできるのですが下記のようにメール本文への添付となってしまいます。
    mail.jpg
    恐らく
    attachfile.SendKeys "C:\Users\yoshi\Desktop\sample.txt"
    だとメール本文へ添付しようとしてエラーになっていると思われます。
    sample.jpg
    のように添付ファイルができる方法を探しております。
    "input[type='file']"以外の要素があるのかなぁと。。。

  2. OWAではなく、Desktop Outlook であれば、簡単に(添付ファイル付き)メール作成できますが・・・

    OWAにこだわる理由がなければ、例えば;

  3. 恐らく
    attachfile.SendKeys "C:\Users\yoshi\Desktop\sample.txt"
    だとメール本文へ添付しようとしてエラーになっていると思われます。

    ドラッグ&ドロップすると、txtファイルでも添付できますね。
    これを Selenium でできるかどうかですが。。。➞ できるようです。

  4. @yamaxzira

    Questioner

    ご意見ありがとうございます。
    Outlookクラシック(Desktop)であれば良いのですが、
    今回Outlookクラシックの保証期間が2029年までかもしれないという
    ことから来ている話なので、WEB版ではどうするかとい言われています。

    ドラッグ&ドロップですか。。。
    デスクトップとかもしくは特定のフォルダからってできるんですかね。。
    ブラウザの制御からはずれるのと制御が不安定になる気がします。
    引き続き私のほうでも色々調査してみます。

    素直にPowerAutomate使わせてもらうのが一番いいとは思っているのですが、
    エンドユーザーの制約もあって色々可能性を探っています。

  5. VBAによる送信メール作成は、Outlookのクラシック版かどうかは関係ありませんし、
    VBAスクリプト以外でも、PowerShellでも送信メール作成はできます。

  6. @yamaxzira

    Questioner

    Outlookについてはクラシック版が2029年まではサポートされるのですが、
    その後どうなるかわからないので、今後はVBAでOutlookを操作する場合はWEB版を
    使わなければならないのではないかというところからこの話は来ていました。
    なのでクラシック版は使えないんですよね。

    新しい Outlook による従来の Outlook の置き換え時期 (2024 年 5 月現在)
    https://outlooklab.wordpress.com/2024/05/11/%E6%96%B0%E3%81%97%E3%81%84-outlook-%E3%81%AB%E3%82%88%E3%82%8B%E5%BE%93%E6%9D%A5%E3%81%AE-outlook-%E3%81%AE%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E6%99%82%E6%9C%9F-2024-%E5%B9%B4-5-%E6%9C%88%E7%8F%BE/

    PowerShellでメールを作成するのも恐らくOutlookのCOMオブジェクトを使用しなくてはならないと思うので、
    どうかなぁというところです。

    となると今のところ考えられるのは
    ・OutlookのWEB版を操作してメールを作成する。
    ・PowerAutomateを使う。
    2案かなぁと。

    PowerAutomateを使えば確実なのですが、お客様環境でまだPowerAutoamteを使えるかが
    微妙なのでSeleniumVBAでOutlookのWEB版を操作する案も調査しています。

    色々案をいただきありがとうございます。

  7. @yamaxzira

    Questioner

    とりあえず、解決(?)したので自己レスします。
    結局Windowsのファイル選択ダイアログをVBAで操作することで他のファイルの添付ができました。
    下記のソースは
    1.挿入>添付ファイル>このコンピューターから選択をクリックして
      ダイアログを表示
    2.ダイアログに添付ファイルのフルパスをセットして、Enterキーを押下
    しております。
    色々ありがとうございました。

    Set elm = Nothing
    Set elm = .FindElement(By.XPath, "//span[text()='挿入']")
    .Wait 2000
    elm.Click
    
    Set elm = Nothing
    Set elm = .FindElement(By.XPath, "//button[@aria-label='添付ファイル']")
    .Wait 2000
    elm.Click
    
    i = 0
    Set elm = Nothing
    Do Until i > 500
        If .IsPresent(By.Name, "このコンピューターから選択") = True And _
            .FindElement(By.Name, "このコンピューターから選択").IsDisplayed = True Then
            Exit Do
        End If
    .Wait 1000
    i = i + 1
    Loop
    Set elm = .FindElement(By.Name, "このコンピューターから選択")
    elm.Click
    

    ' --- WindowsAPIのダイアログボックスを操作 ------------------------
    Dim filePath As String
    Dim wsh As Object

    filePath = """C:\Users\yoshi\Desktop\sample1.txt"" " & _
        """C:\Users\yoshi\Desktop\sample2.txt"" " & _
        """C:\Users\yoshi\Desktop\sample3.zip"""
    
    Set wsh = CreateObject("WScript.Shell")
    wsh.AppActivate "開く"
    Application.Wait Now + TimeValue("0:00:05")
    wsh.SendKeys filePath
    Application.Wait Now + TimeValue("0:00:05")
    wsh.SendKeys "{ENTER}"
    Application.Wait Now + TimeValue("0:00:05")
    

    ' --------------------------------------------------------------

Your answer might help someone💌