Я хочу ввести текст в текстовую область. Проблема в том, что textarea
создается и отображается в html после двойного нажатия на визуальный элемент в браузере.
Для этого визуального элемента Dubbelklik om je tekst te typen
я не могу найти элемент в html, который ссылается на него, и выполнить double_click()
. Существуют только контейнеры, которые либо являются элементами, которые нельзя кликнуть, либо разрешают клики, но не выполняют никаких действий.
Вплоть до тех пор, пока это не сработает, визуальный сигнал двойного щелчка появится чуть ниже центра:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
driver = webdriver.Chrome()
driver.get("https://www.hallmark.nl/kaarten/verjaardag-man/")
#wait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href*='https://www.hallmark.nl:443/kaarten/verjaardag-man/grappig-m/make-that-the-cat-wise/happy-bursdeej-to-jou-3415094.aspx']"))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href*='https://www.hallmark.nl:443/kaarten/verjaardag-man/grappig-m/hallmark/een-jaguar-voor-je-verjaardag-3346861.aspx']"))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.ID, "btnShowSizepicker"))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Standaard']"))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class, 'showDesktop')]//button[contains(text(),'Binnenkant')]"))).click()
Но с тех пор я не могу найти ничего, чтобы заставить селен щелкнуть по элементу.
Я попытался щелкнуть вещи, которые я могу найти в HTML:
# elem = driver.find_element_by_xpath("//div[contains(@class, 'canvasAnchor')]").click()
Это дает ошибку element not interactable
. Я также попытался использовать смещение для поиска элемента:
elem = driver.find_element_by_class_name("canvas-container")
print(elem.location)
print(elem.size)
action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(elem, 0.5*elem.location.get('x'), (0.5*elem.location.get('y'))) #should click in the middle of this container
action.double_click()
action.perform()
Но для разных элементов и значений x и y я могу только заставить его ничего не делать или щелкнуть на боковой панели контактов (которая выделяет слово «Ниим»).
Если дважды щелкнуть вручную, в html появится textarea
, и я смогу выполнить send_keys('hello world')