Тема: Як скопіювати текст із форматуванням за допомогою Python + Selenium?

Я використовую Python + Selenium і мені потрібно скопіювати текст з веб-сторінки до буфера обміну ОС Windows з форматуванням.

Наприклад, коли ви копіюєте текст з веб-сторінки, натискаючи комбінацію клавіш Ctrl+C, а потім вставляєте його в Microsoft Word, використовуючи комбінацію клавіш Ctrl+V, ви можете побачити, що текст скопійований з форматуванням.

Я хочу досягти такого ж результату зі скриптом Python + Selenium, який переходить на веб-сайт і копіює отформатований текст в буфер обміну. Потім я хочу вручну відкрити Microsoft Word, натиснути Ctrl+V і вставити текст зі своїм форматуванням.

Ось приклад мого коду, але він копіює лише стилі, а не форматування:

import time
import pyperclip
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

# Налаштування параметрів Chrome
options = Options()
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

# Запуск драйвера Chrome
driver = webdriver.Chrome(options=options)

# Перехід на веб-сторінку
driver.get("https://example.com/")
time.sleep(2) # чекаємо завантаження сторінки

# Знаходження елемента, що містить текст
element = driver.find_element("xpath", "/html/body/div")
text = element.get_attribute("innerHTML")

# ----> АБО: text = driver.find_element("tag name", "body").text # теж не копіює форматування

# Копіюємо текст в буфер обміну
pyperclip.copy(text)

# Закриваємо драйвер
driver.quit()

Питання: Як можна скопіювати текст з форматуванням, використовуючи Selenium?

Примітка: Я знаю, що можна симулювати натискання клавіш:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from time import sleep

# Create a new instance of the Chrome driver
driver = webdriver.Chrome()

# Navigate to example.com
driver.get("https://en.wikipedia.org/wiki/List_of_lists_of_lists")

# Find the element that contains the text to copy
element = driver.find_element(By.XPATH, '//*[@id="mw-content-text"]/div[1]/ul[4]')

# Select all the text on the page and copy it to the clipboard
actions = ActionChains(driver)
actions.move_to_element(element)
ActionChains(driver).click(element).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).key_down(Keys.CONTROL).send_keys("c").key_up(Keys.CONTROL).perform()

# Quit the driver
driver.quit()

але цей варіант не підходить, тому що я не знаю, як вибрати окремий елемент, а не весь документ

2

Re: Як скопіювати текст із форматуванням за допомогою Python + Selenium?

Бібліотека так klembord допомогла

import time
import klembord
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

# Configure Chrome options
options = Options()
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)
driver.get("https://example.com/")
time.sleep(2) 


element = driver.find_element("xpath", "/html/body/div")
text = element.get_attribute("innerHTML")

klembord.set_with_rich_text(text,text)

driver.quit()
Подякували: Firefox is dead, koala2

3

Re: Як скопіювати текст із форматуванням за допомогою Python + Selenium?

pyperclip 1.8.2
A cross-platform clipboard module for Python. (Only handles plain text for now.)

https://pypi.org/project/pyperclip/

Подякували: Betterthanyou1