为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2022-11-29 15:56:43
我将 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。如您所见,我真的不知道自己在做什么-请帮忙谢谢:)
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

.texarea不会找到任何元素:


.指示选择器应在className元素的 中查找前值。


因此,您是在告诉选择器查找带有className文本区域的元素。


您将className选择器与tagname选择器混淆了。如果您想通过标记名获取它,您只需使用不带任何点 (.) 的标记名,因此:


find_element_by_css_selector("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")

请注意,在第二个版本中,选择器中有多个点 (.),告诉引擎使用:搜索tagnametextarea的元素。每个单独的类名在标记中由空格分隔,因此您使用点 (.) 告诉选择器将这些类名链接在一起。classNamestw-block tw- 

            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 )


查看完整回答
反对 回复 2022-11-29
?
SMILET

TA贡献1796条经验 获得超4个赞

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

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC


查看完整回答
反对 回复 2022-11-29
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

你的 css 选择器是错误.textarea的,在 css 选择器中识别class name.

试试下面的css选择器。

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


查看完整回答
反对 回复 2022-11-29
  • 3 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号