Selenium操作SoundCloud搜索框触发element not interactable错误如何解决?
问题原因分析
出现element not interactable报错的核心原因是你获取到的input元素在执行send_keys时处于不可交互状态,具体到你的代码有以下两个明确错误:
- 操作顺序颠倒:你先执行
find_element_by_css_selector查找元素,之后才调用time.sleep(10)等待页面加载。页面刚调用get()加载的初始阶段DOM尚未完全渲染,此时查找拿到的元素是未激活、不可编辑的状态,后续等待10秒也不会更新已经获取到的元素对象的状态。 - 未校验元素的可交互属性:直接查找元素没有判断是否可见、可编辑,有可能匹配到页面上隐藏的同类名input节点。
修复方案
将查找元素的逻辑放到等待之后,使用显式等待直接校验元素可交互状态再执行操作,修复后的代码示例如下:
from tkinter import * import random import urllib.request from bs4 import BeautifulSoup from selenium import webdriver import time import requests from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.chrome.options import Options driver = webdriver.Chrome(executable_path='/Users/quanahbennett/PycharmProjects/SeleniumTest/chromedriver') url= "https://soundcloud.com/" driver.get(url) wait = WebDriverWait(driver, 30) # 等待搜索框可交互再查找元素 attempt = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input.headerSearch__input'))) # 可选操作:先点击激活搜索框再输入 attempt.click() attempt.send_keys('Hello') breakpoint() #driver.quit()
如果修改后仍然报错,可以尝试用执行JS的方式直接给input赋值,规避前端交互限制:
driver.execute_script("arguments[0].value = 'Hello'", attempt)
内容的提问来源于stack exchange,提问作者drakepolo
相关产品推荐
相关产品推荐

