如何通过Selenium和Python按照html将文本发送到textarea

时间:2018-09-05 05:38:47

标签: python selenium xpath css-selectors webdriver

我想在文本框中单击并发送文本,但找不到该元素。

这是我要单击并发送文本的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 :(得分:1)

如果要在“文本区域”上键入文本,则需要找到文本区域:

driver.find_element_by_xpath("//textarea[@data-button='9656414']")

答案 1 :(得分:0)

您正在尝试单击并将文本发送到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()

答案 2 :(得分:0)

根据 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