【问题标题】:Python selenium - Using browser.find_element_by_id() isn't finding object with IDPython selenium - 使用 browser.find_element_by_id() 找不到具有 ID 的对象
【发布时间】:2020-12-06 04:18:48
【问题描述】:

Selenium 有点问题。我是 Selenium、网络抓取和 python 整体的新手。我正在做一个练习项目,我可以直接从我的 IDE 发送电子邮件。

我已经能够很好地在“发送至”、“抄送”和“主题行”中输入内容。我在输入正文时遇到问题。

这是我的电子邮件/检查元素的屏幕截图:

正如您在这张图片中看到的(由 stackOverflow 像素化,但我认为您可以理解,主体是一个 ID 为“tinymce”的大框。表示此文本输入的代码块是:

<body id="tinymce" class="mce-content-body mce-inactive-editor" data-id="ZmHtmlEditor1_body" 
contenteditable="true" style="font-family: arial, helvetica, sans-serif; font-size: 10pt; color: rgb(0, 
0, 0); width: 696px; height: 212px;" data-mce-style="font-family: arial, helvetica, sans-serif; font-
size: 10pt; color: #000000;" dir="LTR" aria-label="Compose body"><div><br data-mce-bogus="1"></div>
</body>

我的代码,打开文本框,是

# EMAIL BODY TEXT
content = pyit.inputStr(prompt='What is the body of your email?\n')

clickBodyText = browser.find_element_by_id('tinymce').click()
bodyText = browser.find_element_by_id('tinymce').sendKeys(content)

我首先单击正文以激活输入,然后单击内容的发送键。这将返回 no such element 错误

    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="tinymce"]"}
  (Session info: chrome=84.0.4147.125)

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    你可以使用

    find_element_by_id()
    

    find_element_by_xpath()
    

    但是如果在执行命令之前没有加载元素,错误将是相同的 为此,您可以使用以下方法

    import time
    time.sleep(5)
    

    在打开网页后使用 time.sleep,以便在执行任何操作之前完全加载它

    【讨论】:

    • 我认为这不是问题 - 我的整个网站已经预先加载。我之前在使用 time.sleep() 的项目中遇到了类似的问题,但是页面已经为此加载了。
    • 如果你想在输入区域插入任何东西,你不需要点击它,你可以简单地将键发送到 textarea 元素
    • 可能是这样,但我仍然找不到元素。
    【解决方案2】:

    要在元素中发送字符序列,您必须为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下Locator Strategies 之一:

    • 使用CSS_SELECTOR

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body.mce-content-body.mce-inactive-editor#tinymce"))).sendKeys(content)
      
    • 使用XPATH

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//body[@class='mce-content-body mce-inactive-editor' and @id='tinymce']"))).sendKeys(content)
      
    • 注意:您必须添加以下导入:

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

    【讨论】:

      猜你喜欢
      • 2022-07-28
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 2019-09-02
      • 2020-08-19
      • 1970-01-01
      相关资源
      最近更新 更多