如何使用Selenium和Python定位并单击textarea元素
我将Selenium与python结合使用,并尝试单击一个文本框,然后输入一条消息。 文本框的HTML如下所示:如何使用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
<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