Как отправить текст в текстовое поле по HTML через Selenium и Python - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу щелкнуть и отправить текст в текстовом поле, но не смог найти элемент.

Это HTML, который я хочу щелкнуть и отправить текст-

<form class="addComment expand" data-id="9656414">
<img 
src="https://ctl.s6img.com/society6/img/g2taHIrokQ01R_67jS8ulaWI2wk/h_150,w_150/users/avatar/~artwork/s6-original-art-uploads/society6/uploads/u/sul97/avatar_asset/d837ee10016843a3bba9ae3310cc338d" width="25" height="25">
                                <textarea placeholder="Add a comment..." data-button="9656414"></textarea>
                                <button id="b9656414">Comment</button>
                            </form>

Мой код: -

driver.find_element_by_class_name('add').click()
comments = driver.find_element_by_xpath("/html/body/form[2]")
comments.click()
comments.send_keys("Awesome Art")

Я могу нажать, но не могу напечатать на нем текст. Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Если вы хотите напечатать текст в области текста, вам нужно найти область текста:

driver.find_element_by_xpath("//textarea[@data-button='9656414']")
0 голосов
/ 05 сентября 2018

В соответствии с HTML , которым вы поделились, желаемый элемент является элементом React , поэтому вам нужно заставить WebDriverWait для элемента быть активным , и вы можете использовать одно из следующих решений:

  • CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "form.addComment.expand textarea[placeholder^='Add a comment']"))).send_keys("Awesome Art")
    
  • XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//form[@class='addComment expand']//textarea[contains(@placeholder,'Add a comment')]"))).send_keys("Awesome Art")
    

Примечание : Вы должны добавить следующий импорт:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 05 сентября 2018

Вы пытаетесь щелкнуть и отправить текст самой form, а не текстовой области. Вот как вы можете найти текстовую область и кнопку внутри form.

driver.find_element_by_css_selector("form[class='addComment expand'] textarea").send_keys("Awesome Art")
driver.find_element_by_css_selector("form[class='addComment expand'] button").click()
...