如何使用 Selenium 和 Python 定位并单击文本区域元素

我将 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>

我一直在尝试使用以下代码通过 css 选择器选择它:


time.sleep(3)

input_box = browser.find_element_by_css_selector(".textarea")

input_box.click()

for ch in message:

    input_box.send_keys(ch)

input_box.send_keys(Keys.ENTER)

它一直给我一个 NoSuchElement。如您所见,我真的不知道自己在做什么-请帮忙谢谢:)


慕哥6287543
浏览 254回答 3
3回答

慕娘9325324

.texarea不会找到任何元素:.指示选择器应在className元素的 中查找前值。因此,您是在告诉选择器查找带有className文本区域的元素。您将className选择器与tagname选择器混淆了。如果您想通过标记名获取它,您只需使用不带任何点 (.) 的标记名,因此:find_element_by_css_selector("textarea")&nbsp;这将返回它找到的第一个 textarea 元素,这可能是也可能不是您想要的。为了使其更精确,您可以执行以下操作:find_element_by_css_selector("textarea.tw-block.tw-&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; border-radius-medium.tw-font-size-6.tw-full-width.tw-textarea.tw-textarea--no-resize")请注意,在第二个版本中,选择器中有多个点 (.),告诉引擎使用:搜索tagnametextarea的元素。每个单独的类名在标记中由空格分隔,因此您使用点 (.) 告诉选择器将这些类名链接在一起。classNamestw-block tw-&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; border-radius-medium tw-font-size-6 tw-full-width tw-textarea tw-textarea--no-resizeHtml如果碰巧你有多个与classNames上面相同的文本区域,你需要为你想要的文本区域找到某种唯一标识符。所以由提供的选择器KunduK就是一个很好的例子。也许此链接将帮助您了解有关 css 选择器的更多信息:( https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors )

SMILET

根据 HTML,元素是一个<textarea>元素。因此,要识别元素,相关代码应该是以下之一:browser.find_element_by_tag_name("textarea")browser.find_element_by_css_selector("textarea[attribute_name='attribute_value']")解决方案理想情况下,要识别并单击所需的元素,您必须为 引入WebDriverWait并且element_to_be_clickable()您可以使用以下任一 定位器策略:使用CSS_SELECTOR: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 WebDriverWaitfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as EC

慕虎7371278

你的 css 选择器是错误.textarea的,在 css 选择器中识别class name.试试下面的css选择器。input_box&nbsp;=&nbsp;browser.find_element_by_css_selector("textarea[data-a-target='chat-input']")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python