python selenium,我无法从文本框中找到元素 class 或 id

python selenium, i can't find element class or id from a text box

我需要一些帮助, 我尝试填写一个文本框 但是当我检查元素然后复制 xpath 它只给我

/body/html

然后,我尝试使用 class 名称,但它不起作用

我该如何解决这个问题?

这是我的代码:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('link_to_the_website')

driver.find_element_by_xpath('/body/html').send_keys('hello world')

textboxes = driver.find_element_by_xpath('/html/body')

这是我检查文本框时的 html 代码

<body marginwidth="0" marginheight="0" class="textarea from-control wysihtml5-editor placeholder" spellcheck="true" style="background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); cursor: text; font-family: &quot;Open Sans&quot;, sans-serif; font-size: 11px; font-style: normal; font-variant: normal; font-weight: 400; line-height: 16.5px; letter-spacing: normal; text-align: start; text-decoration: none solid rgb(0, 0, 0); text-indent: 0px; text-rendering: auto; word-break: normal; overflow-wrap: break-word; word-spacing: 0px;" contenteditable="true">type here......</body>

当您右键单击并检查元素时,请尝试先查看它是否有名称,然后相应地使用 driver.find_element_by_name("")

如果没有可用的名称,下一步应该是通过css-选择器driver.find_element_by_css_selector("").

查找元素

Xpath 通常是您最不想使用的东西。 顺便说一句,你提供的 link 在我复制它时确实有一个 xpath。它将是 /html/body/div[3]/div[1]/div[2]/div/form/div[1]/div/input[1]

  1. 您尝试访问的元素在 iframe 中。
  2. 你应该使用显式等待
  3. 您的定位器有误...
    这可能会更好:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
driver.get('link_to_the_website')
wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"(//iframe)[1]")))
textarea = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body.textarea")))
textarea.send_keys(your_text)

UPD
第二个文本区域位于另一个 iframe 内,但由于这些不是嵌套的 iframe,因此为了从第一个 iframe 切换到第二个 iframe,您需要从第一个 iframe 切换到默认内容,然后再切换到第二个 iframe。 通常,在处理完 iframe 中的元素后切换到 iframe 后,您应该切换到默认内容。
因此,要将文本写入 2 个文本区域,您的代码可能如下所示:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
driver.get('link_to_the_website')
wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"(//iframe)[1]")))
textarea1 = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body.textarea")))
textarea1.send_keys(your_text1)
driver.switch_to.default_content()
wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"(//iframe)[2]")))
textarea2 = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body.textarea")))
textarea2.send_keys(your_text2)