如何用Python+Selenium获取元素的aria-disabled属性值?
问题描述
我有一段基于Selenium的代码,能完成Instagram访问、账号登录、用户搜索操作,但始终无法实现查看类名为_aarf的div元素的aria-disabled属性是否为"true"并打印判断结果的需求。目标元素的HTML结构如下:
<div class="_aarf" aria-disabled="true" role="button" tabindex="-1">
现有实现代码如下:
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait # 指定chromedriver路径 driver = webdriver.Chrome('C:/Users/me/Desktop/IG_APP/chromedriver.exe') # 打开Instagram driver.get("http://www.instagram.com") # 定位用户名输入框 username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='username']"))) password = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='password']"))) # 输入账号密码 username.clear() username.send_keys("MYUSERID") password.clear() password.send_keys("MYPASSWORD") # 点击登录按钮 button = WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))).click() # 处理弹窗 not_now = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Not Now")]'))).click() not_now2 = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Not Now")]'))).click() import time # 定位搜索框 searchbox = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='Search']"))) searchbox.clear() # 搜索目标用户 keyword = "@test" searchbox.send_keys(keyword) time.sleep(2) searchbox.send_keys(Keys.ENTER) time.sleep(2) searchbox.send_keys(Keys.ENTER) time.sleep(2)
解决方案
要实现需求,核心是等待目标元素加载完成后,获取其aria-disabled属性值并进行判断。Instagram页面是动态渲染的,建议用WebDriverWait替代time.sleep来等待元素,确保元素已存在于DOM中。
修改后的完整代码如下:
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait # 指定chromedriver路径 driver = webdriver.Chrome('C:/Users/me/Desktop/IG_APP/chromedriver.exe') # 打开Instagram driver.get("http://www.instagram.com") # 定位用户名输入框 username = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='username']"))) password = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='password']"))) # 输入账号密码 username.clear() username.send_keys("MYUSERID") password.clear() password.send_keys("MYPASSWORD") # 点击登录按钮 button = WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))).click() # 处理弹窗 not_now = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Not Now")]'))).click() not_now2 = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Not Now")]'))).click() # 定位搜索框 searchbox = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='Search']"))) searchbox.clear() # 搜索目标用户 keyword = "@test" searchbox.send_keys(keyword) searchbox.send_keys(Keys.ENTER) searchbox.send_keys(Keys.ENTER) # 等待目标元素加载完成,获取aria-disabled属性 target_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "_aarf")) ) aria_disabled_value = target_element.get_attribute("aria-disabled") # 判断并打印结果 is_disabled = aria_disabled_value == "true" print(f"元素是否被禁用(aria-disabled=true):{is_disabled}") # 可选:关闭浏览器 # driver.quit()
关键修改说明
- 替换了部分
time.sleep为WebDriverWait,确保页面元素加载完成后再执行操作 - 使用
EC.presence_of_element_located等待目标元素出现在DOM中(如果需要元素可点击,可改用EC.element_to_be_clickable) - 通过
get_attribute("aria-disabled")获取属性值,注意属性值是字符串类型,需与"true"(小写)做比较 - 直接打印判断结果,清晰展示元素是否处于禁用状态
内容的提问来源于stack exchange,提问作者Pythoner
相关产品推荐
相关产品推荐

