Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Selenium和Python定位并单击textarea元素_Python_Selenium_Xpath_Css Selectors_Webdriverwait - Fatal编程技术网

如何使用Selenium和Python定位并单击textarea元素

如何使用Selenium和Python定位并单击textarea元素,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我将Selenium与python结合使用,并尝试单击一个文本框,然后输入一条消息。 文本框的HTML如下所示: <div class="tw-block tw-border-radius-large tw-pd-0"> <div class="tw-relative"> <div class="chat-input__textarea"> <textarea data-a-target="chat-inp

我将Selenium与python结合使用,并尝试单击一个文本框,然后输入一条消息。 文本框的HTML如下所示:

<div class="tw-block tw-border-radius-large tw-pd-0">
    <div class="tw-relative">
        <div class="chat-input__textarea">
            <textarea data-a-target="chat-input" data-test-selector="chat-input" class="tw-block tw- 
            border-radius-medium tw-font-size-6 tw-full-width tw-textarea tw-textarea--no-resize" 
            autocomplete="Messenger-chat" maxlength="500" placeholder="Send a message" rows="1" 
            style="padding-right: 3.5rem;"></textarea>
        </div>
     </div>
</div>

它总是让我感到不安。正如你所看到的,我真的不知道我在做什么-请帮助,谢谢:)

。texarea
找不到任何元素:

指示选择器应在元素的
类名中查找继续的值

因此,您告诉选择器查找具有
className
textarea的元素

您将
类名称
选择器与
标记名
选择器混淆。如果要按标记名获取,只需使用不带任何点(.)的标记名,因此:

这将返回它找到的第一个textarea元素,它可能是您想要的,也可能不是您想要的。要使其更精确,您可以执行以下操作:

find_element_by_css_selector("textarea.tw-block.tw- 
        border-radius-medium.tw-font-size-6.tw-full-width.tw-textarea.tw-textarea--no-resize")
请注意,在第二个版本中,选择器中有多个点(.),告诉引擎使用
类名搜索
标记名
文本区域的元素:
tw block tw-
边框半径中等tw-font-size-6 tw全宽tw textarea tw textarea--不调整大小
。每个单独的类名在
Html
标记中用空格分隔,因此您可以使用点(.)告诉选择器将这些类名链接在一起

如果您碰巧有多个textarea具有与上述相同的
类名
,则需要为所需的textarea找到某种唯一标识符。因此,
KunduK
提供的选择器就是一个很好的例子


也许此链接将帮助您了解有关css选择器的更多信息:()

您的css选择器错误
。css选择器中的文本区域
识别
类名

试试下面的css选择器

input_box = browser.find_element_by_css_selector("textarea[data-a-target='chat-input']")

根据HTML,元素是
元素。因此,要识别元素,相关代码应为以下任一代码:

  • 浏览器。通过标签名称(“文本区域”)查找元素。
  • 浏览器。通过css选择器(“textarea[attribute\u name='attribute\u value'])查找元素
解决方案 理想情况下,要在所需元素中识别并单击,您必须引导WebDriverWait使
元素成为可单击的()
,并且您可以使用以下任一选项:

  • 使用
    CSS\u选择器

    input_box = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "textarea[data-a-target='chat-input'][data-test-selector='chat-input'][placeholder='Send a message']")))
    input_box.click()
    
  • 使用
    XPATH

    input_box = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//textarea[@data-a-target='chat-input' and @data-test-selector='chat-input'][@placeholder='Send a message']")))
    input_box.click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
input_box = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//textarea[@data-a-target='chat-input' and @data-test-selector='chat-input'][@placeholder='Send a message']")))
input_box.click()
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC