Как добавить текст в тело письма?

Я искал StackOverflow и другие без хороших результатов.

Мне нужно отправлять электронные письма через Access VBA. Я использую библиотеку Selenium Basic.

Я могу, получить доступ к веб-странице электронной почты, нажать кнопку «Новая почта», заполнить поля «Кому», «Тема», «Копировать в» и «Слепое копирование в», если такие параметры заданы, и нажать кнопку « отправить по электронной почте».

Я не могу редактировать форматированный текст сообщения электронной почты. Я могу отправить электронное письмо, но оно пустое.

Public Sub sendEmail( _
    emailPage As String, _
    sendTo As String, _
    subject As String, _
    emailText As String, _
    Optional copyTo As String, _
    Optional blindCopyTo As String)
    
'Parameters above: emailPage is the intranet, corporative e-mail site from which the e-mails must be 
'sent; sendTo is the e-mail address to which the e-mail will be sent; subject is the subject of the 
'e-mail; emailText is the text that I want to go in the body of the e-mail. 

'Variables below: preparing variables to be used, like a webDriver. I tried to mingle Selenium and 
'Windows HTML objects to no vail, as one can infer from the commented variable

    Dim browser As WebDriver
    Dim webEle As WebElement
    Dim theKeys As selenium.Keys
    Dim por As By
    'Dim CurrentWindow As HTMLWindowProxy
    
'choosing the web browser driver. I chose firefox since it went farther than chrome*:

    Set browser = New FirefoxDriver

'with the browser driver, I go to the e-mail webpage:

    With browser
        .Get emailPage 

'Below I find the elements with the XPath to interact with

        .SwitchToFrame "s_MainFrame"
        .FindElementByXPath("/html/body/div[2]/div/div[4]/div/div/div[1]/div/div[1]/div/div[3]/div[2]/div[10]/table[1]/tbody/tr/td[2]/table/tbody/tr/td[1]/span").Click
        .FindElementByXPath("/html/body/div[2]/div/div[4]/div/div/div[1]/div/div[1]/div/div[3]/div[1]/div/div[5]/div/form/div/div/div[5]/table[1]/tbody/tr[3]/td[3]/div/textarea").SendKeys sendTo
        If IsMissing(copyTo) = False Then
            .FindElementByXPath("/html/body/div[2]/div/div[4]/div/div/div[1]/div/div[1]/div/div[3]/div[1]/div/div[5]/div/form/div/div/div[5]/table[1]/tbody/tr[4]/td[3]/div/textarea").SendKeys copyTo
        End If
        If IsMissing(blindCopyTo) - False Then
            .FindElementByXPath("/html/body/div[2]/div/div[4]/div/div/div[1]/div/div[1]/div/div[3]/div[1]/div/div[5]/div/form/div/div/div[5]/table[1]/tbody/tr[5]/td[3]/div/textarea").SendKeys blindCopyTo
        End If
        .FindElementByXPath("/html/body/div[2]/div/div[4]/div/div/div[1]/div/div[1]/div/div[3]/div[1]/div/div[5]/div/form/div/div/div[5]/table[1]/tbody/tr[6]/td[3]/div/textarea").SendKeys subject

'And here is the problem: I cannot access the e-mail body text to change it. SendKeys won't work. I also
'tried inserting HTML texts like <HTLM><BODY>email text goes here</BODY></HTML> and 
'<HTLM><H1>email text goes here</BODY></HTML>, to no vail.

        .FindElementByXPath("/html/body/div/div").SendKeys emailText
        '.SwitchToFrame "s_MainFrame"

'After that, I click the button to send the e-mail, close the browser driver, and set it to nothing.
        .FindElementByXPath("/html/body/div[2]/div/div[4]/div/div/div[1]/div/div[1]/div/div[3]/div[2]/div[14]/table[1]/tbody/tr/td[1]/span").Click
    End With
    browser.Close
    Set browser = Nothing
   
End Sub

Это элементы, которые я получаю при проверке основного текста. В первой строке основного текста электронного письма, которая является чистой, элемент

<div><br></div>

И его XPath:

/html/body/div/div

Но использовать его в качестве пути доступа в моих тестах бесполезно. Ниже приведены основные значения элемента основного текста форматированного текста:

<body role = "main" id = "e-$new-0-bodyrich-editor" class = "s-mailbody-edit s-disable-inotesstyle">

И это XPath:

/html/body

В Chrome я получаю сообщение об ошибке, и страница электронной почты не открывается. У меня есть версия Chrome 87 и соответствующий драйвер.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
331
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Извините, что беспокою всех!

Я провел еще несколько тестов и обнаружил, что мне нужно ссылаться на XPath для iframe:

    .FindElementByXPath("/html/body/div[2]/div/div[4]/div/div/div[1]/div/div[1]/div/div[3]/div[1]/div/div[5]/div/form/div/div/div[2]/div/div/div[1]/iframe").SendKeys emailText

Я также обновил функцию с помощью While DoEvents, чтобы закрыть драйвер браузера только после того, как страница электронной почты напишет в упомянутом элементе HTML, что электронное письмо было успешно отправлено:

    Do While InStr(1, browser.FindElementByXPath("/html/body/div[2]/div/div[4]/div/div/div[1]/div/div[2]/div[1]/div/div[2]/div/table[1]/tbody/tr/td[2]/span").text, "Email sent successfully") = 0
        DoEvents
    Loop
    

Кроме того, некоторые объявленные переменные не использовались и были удалены, например, webEle. В конечном коде объявляется только переменная браузера.

Пожалуйста, обратите внимание на замену длинных и хрупких xpaths на более короткие, быстрые и надежные селекторы css

QHarr 18.12.2020 01:58

QHarr Я использую полные XPath для этой функции именно потому, что простые XPath, CssSelectors и другие не работали на конкретной веб-странице для этой корпоративной электронной почты. В функциях для работы с другими страницами я использовал другие, более простые селекторы. Спасибо за жесткое предложение, так как оно может быть полезно другим, кто может прочитать эту ветку.

Daniel Afonso 18.12.2020 21:01

Другие вопросы по теме