【问题标题】:Python selenium: Element not interactablePython selenium:元素不可交互
【发布时间】:2020-03-08 14:01:15
【问题描述】:

我尝试使用 python 编写网络自动化代码,但总是收到错误警告:

selenium.common.exceptions.ElementNotInteractableException: 消息:元素不可交互

代码如下:

def commentAndLike():
random.seed()
likeOrNext = random.randint(0, 3)

if likeOrNext == 0:
    if check_exists_by_xpath("/html/body/div[3]/div[2]/div/article/div[2]/section[1]/span[1]/button/span"):
        likeButton = browser.find_element_by_xpath("/html/body/div[3]/div[2]/div/article/div[2]/section[1]/span[1]/button/span")
        likeButton.click()

        time.sleep(randomNumber(6, 10))

        if check_exists_by_xpath("/html/body/div[3]/div[2]/div/article/div[2]/section[1]/span[2]/button/span"):
            random.seed()
            randomComment = random.randint(0, 3)

            textArea = browser.find_element_by_xpath("/html/body/div[3]/div[2]/div/article/div[2]/section[3]/div[1]/form/textarea")

            if randomComment == 0:
                textArea.send_keys(comments[0])
            elif randomComment == 1:
                textArea.send_keys(comments[1])
            elif randomComment == 2:
                textArea.send_keys(comments[2])
            elif randomComment == 3:
                textArea.send_keys(comments[3])

            time.sleep(randomNumber(15,30))

            postButton = browser.find_element_by_xpath("/html/body/div[3]/div[2]/div/article/div[2]/section[3]/div/form/button")
            postButton.click()

            time.sleep(randomNumber(20,25))

            nextButton2 = browser.find_element_by_xpath("/html/body/div[3]/div[1]/div/div/a[2]")
            nextButton2.click()

            time.sleep(randomNumber(15,20))

        else:
            nextButton4 = browser.find_element_by_xpath("/html/body/div[3]/div[1]/div/div/a[2]")
            nextButton4.click()

            time.sleep(randomNumber(20, 25))

    else:
        nextButton1 = browser.find_element_by_xpath("/html/body/div[3]/div[1]/div/div/a[2]")
        nextButton1.click()

        time.sleep(randomNumber(20, 25))

else:
    nextButton = browser.find_element_by_xpath("/html/body/div[3]/div[1]/div/div/a[2]")
    nextButton.click()

    time.sleep(randomNumber(20,25))

尝试将send_keys 指向textArea 元素时会引发错误。

我知道我仍然需要改进代码并将 nextButton 缩短,但我想首先解决问题。谢谢大家的帮助!!

【问题讨论】:

    标签: python selenium warnings


    【解决方案1】:

    根据向textArea 发送密钥会引发错误的问题描述进行修改。

    你可以尝试使用Javascript来设置textarea的值:

    browser.execute_script("arguments[0].value = 'myValue';", textArea)
    

    如果这不起作用,您可以尝试先点击 textArea 来激活它:

    browser.execute_script("arguments[0].click();", textArea)
    
    browser.execute_script("arguments[0].value = 'myValue';", textArea);
    

    在您的情况下,您可以将 'myValue' 替换为 ' + comments[0] + '

    【讨论】:

    • 这不是问题,问题是 Webdriver 无法将_keys 发送到 textArea
    • 如果您在问题描述中包含引发错误的代码行会有所帮助。发布与您一样长的程序并说有错误,如果我们不知道它在哪一行,并不能告诉我们太多。您可以使用browser.execute_script("arguments[0].value = 'myValue';", textArea) 设置文本区域值
    • myValue 是什么?
    • 您希望将文本区域设置为的任何值。在您的情况下,它将是 comments[0] - 取决于您的循环索引。我已经用更具体的解决方案更新了我的答案。
    • 我是为 instagram 做的,但是当我只是将文本粘贴到评论字段时,我无法发布它,不知道如何解决它
    【解决方案2】:

    这种异常被抛出来表示虽然DOM上存在一个元素,但它不是处于可以交互的状态。您可以尝试实现某种等待机制,最好是这样的显式等待机制:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    textArea = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div[3]/div[2]/div/article/div[2]/section[3]/div[1]/form/textarea"))
    

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      相关资源
      最近更新 更多