Можно ли скопировать текст с гиперссылками в буфер обмена и записать его обратно в текстовое поле? - PullRequest
0 голосов
/ 24 сентября 2019

Я автоматизирую задачу, которая выполняется в Интернете с помощью chromedriver, selenium и pyautogui.Я могу открыть всплывающее окно на веб-странице (я думаю, что использует javascipt).Затем я могу удалить существующий текст в текстовом поле, написать новый текст и нажать «Отправить».(Прошу прощения за любое невежество, так как я очень плохо знаком с программированием в целом. На самом деле это расширение / редактирование моего самого первого скрипта / программы на python, что-то, что на самом деле работает, lol.)

Когда я первоначально открываювсплывающее окно, чтобы написать сообщение, шаблон существует в текстовом поле.Содержит важную и уникальную гиперссылку.Я хочу извлечь это, а затем удалить все содержимое в текстовом поле и написать новое сообщение, содержащее эту конкретную ссылку.Эта задача будет автоматизирована несколько раз, и ссылка будет уникальной в зависимости от того, кому отправляется сообщение.

Я пытался найти гиперссылку по xpath и пару других вещей, но продолжаю получать различные ошибки.Я хочу отметить одну вещь, и извините за недостаток знаний, но xpath сильно отличается от этого на этом сайте.Опять же, я считаю, что это из-за JavaScript.Вот пример xpath для гиперссылки:

//*[@id="clientEmailFormOneModal"]/div[3]/div[11]/div[2]/div/div[1]/div[2]/a

Я использовал xpath на этом сайте для других вещей, но когда эти дивы вступают в игру, все становится странным.

Вот мойтекущая функция для этой конкретной задачи:

def email_estimate():
    driver.find_element_by_id('hlEmailInvoiceOrEstimate').click() #clicks button on page to reveal the 'send an email' pop up
    time.sleep(1.9)
    driver.find_element_by_class_name('trumbowyg-editor').click() #clicks into the textbox on the pop up
    time.sleep(1)
    payLink = driver.find_elements_by_xpath('//*[@id="clientEmailFormOneModal"]/div[3]/div[11]/div[2]/div/div[1]/div[2]/a') #my attempt at finding the hyperlink by xpath and saving it as a variable
    time.sleep(.5)
    driver.find_element_by_class_name('trumbowyg-editor').clear() #clear the content of the textbox
    message_box = driver.find_element_by_class_name('trumbowyg-editor')
    message_box.send_keys('hey', contactName, 'here is the link to pay:', payLink) #Write message including the contact name which was pulled in a step before this and works as expected, and the hyperlink, which does not work
    time.sleep(30)
    print("Followed up on estimate "+ str(j) + ". Contact: " + contactName) #clicks the send button to send the message
    time.sleep(1.85)

Вы можете увидеть ожидаемые результаты, записанные в виде комментариев для шага в приведенном выше коде.На самом деле происходит Traceback и TypeError:

Traceback (most recent call last):
  File "C:/Users/myname/Desktop/automation/WIP/Payment FollowUps/payments.py", line 77, in <module>
    email_estimate()
  File "C:/Users/myname/Desktop/automation/WIP/Payment Follow Ups/payments.py", line 33, in email_estimate
    message_box.send_keys('hey', contactName, 'here is the link to pay:', payLink) #, contactName, payLink
  File "C:\Users\myname\Desktop\automation\WIP\Payment Follow Ups\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 478, in send_keys
    {'text': "".join(keys_to_typing(value)),
TypeError: sequence item 32: expected str instance, WebElement found

1 Ответ

0 голосов
/ 24 сентября 2019

payLink = driver.find_elements_by_xpath('//*[@id="clientEmailFormOneModal"]/div[3]/div[11]/div[2]/div/div[1]/div[2]/a')

этот возвращает webelements .Который вы хотите объединить со строками:

message_box.send_keys('hey', contactName, 'here is the link to pay:', payLink)

Что не работает, следовательно, expected str instance, WebElement found.

Извлеките значение из webelement как payLink[0].get_attribute("href"),

...