3 回答

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 )

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

TA贡献1802条经验 获得超4个赞
你的 css 选择器是错误.textarea
的,在 css 选择器中识别class name
.
试试下面的css选择器。
input_box = browser.find_element_by_css_selector("textarea[data-a-target='chat-input']")
添加回答
举报