如何使用selenium和Python调用send_keys()

如何使用selenium和Python调用send_keys(),python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我知道我做错了什么。我需要创建软件来测试一个网站。send_keys在我剩下的代码中运行良好,但我不确定我在这一部分中做错了什么。我已经尝试了我能想到的一切。我对python和selenium非常陌生,所以它可能有些愚蠢 我尝试过的事情: 一, 二, 三, 我已经尝试了我能想到的每一种组合,我知道它需要匹配HTML,但我仍然尝试了使用lambda和不使用lambda,使用span和textarea(因为它有一个按钮,您可以按它将光标放在文本框中) 我不知道还能尝试什么 它只需单击文本框,添加单词

我知道我做错了什么。我需要创建软件来测试一个网站。send_keys在我剩下的代码中运行良好,但我不确定我在这一部分中做错了什么。我已经尝试了我能想到的一切。我对python和selenium非常陌生,所以它可能有些愚蠢

我尝试过的事情:

一,

二,

三,

我已经尝试了我能想到的每一种组合,我知道它需要匹配HTML,但我仍然尝试了使用lambda和不使用lambda,使用span和textarea(因为它有一个按钮,您可以按它将光标放在文本框中) 我不知道还能尝试什么

它只需单击文本框,添加单词,然后按enter键

这是它需要进入的文本框的HTML:

<form class="X7cDz" method="POST">

<textarea aria-label="Add a comment…" placeholder="Add a comment…" class="Ypffh" autocomplete="off" autocorrect="off" style="height: 18px;"></textarea>

<button class="sqdOP yWX7d    y3zKF     " type="submit">
Post
</button> 

</form>

邮递
这是它可以单击的按钮的HTML,光标将进入框中:

<span class="_15y0l">
<button class="dCJp8 afkep">
<span aria-label="Comment" class="glyphsSpriteComment__outline__24__grey_9 u-__7"> 
</span>
</button>
</span>


网站的这一部分工作得非常完美。我知道,因为我已经手工测试过了。

我认为您不需要使用lambda来完成此任务。您走的是正确的道路,首先需要确定文本框的路径并将其设置为变量,这样您的send_keys()就可以知道在哪里输入文本。然后需要找到enter按钮的路径并单击它。这样做应该会有所帮助:

elem = driver.find_element_by_xpath('textbox xpath here')
elem.send_keys('what you want to put into textbox')
driver.find_element_by_xpath('your enter button xpath here').click()
如果您可以提供网站或示例,我可以提供更具体的代码。

所需的元素是已启用的元素,因此要在元素上调用
发送密钥()
,您必须诱导WebDriverWait使
元素可单击()
,并且您可以使用以下任一选项:

  • 使用
    CSS\u选择器

    elem = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "textarea[aria-label^='Add a comment'][placeholder^='Add a comment']")))
    elem.send_keys("Daniela Ciro")
    elem.send_keys(Keys.RETURN)
    
  • 使用
    XPATH

    elem = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//textarea[starts-with(@aria-label, 'Add a comment') and starts-with(@placeholder, 'Add a comment')]")))
    elem.send_keys("Daniela Ciro")
    elem.send_keys(Keys.RETURN)
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

它是否抛出任何异常,或者代码完成时没有错误,但什么也没做?@AlexeyR它运行,但除了留下注释之外,它还执行其他所有操作。它甚至不把它写在盒子里或任何东西里。
elem=WebDriverWait(driver,20)。直到(EC.element-to-be-clickable((By.CSS-SELECTOR,“textarea[aria-label^='Add-comment']][placeholder^='Add-comment'])。单击()
elem=WebDriverWait(driver,20)。直到(EC.element-to-to-be-be-clickable((By.CSS-SELECTOR,textarea[aria label^='Add a comment'][placeholder^='Add a comment']])
elem。单击()
当您单击文本框时,该文本框将被启用,这就是为什么我尝试先单击它。我是否需要在“发送密钥”之前仍单击它?如果需要,您将如何执行?我尝试了您发送给我的内容,但它仍然不起作用。我执行了以下操作:
elem = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "textarea[aria-label^='Add a comment'][placeholder^='Add a comment']")))
elem.send_keys("Daniela Ciro")
elem.send_keys(Keys.RETURN)
elem = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//textarea[starts-with(@aria-label, 'Add a comment') and starts-with(@placeholder, 'Add a comment')]")))
elem.send_keys("Daniela Ciro")
elem.send_keys(Keys.RETURN)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC