【问题标题】:'get_attribute' method in Python SeleniumPython Selenium 中的“get_attribute”方法
【发布时间】:2022-11-28 09:26:11
【问题描述】:

获取属性()Python Selenium 中的方法报错:

你的意思 '获取属性'.

为什么我需要那个?

我正在尝试获取父元素类属性以了解我是否到达了正确的DOM 位置。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from datetime import datetime
#import pandas as pd

driver = webdriver.Chrome(r"C:\Users\Admin\Downloads\chromedriver_win32 (1)\chromedriver.exe")
driver.get("https://www.nba.com/schedule?pd=false&region=1")
driver.implicitly_wait(5)
element_to_click = driver.find_element(By.ID, "onetrust-accept-btn-handler") #.click()
element_to_click.click()
element_to_save = driver.find_element(By.XPATH, "//div/div/div/div/h4")

#Element_to_save.to_excel("3row, 3column)")
f = open('result_file00.txt', 'r+')
f.write(element_to_save.text)
f.write("\n")
f.write(str(datetime.today()))
myList = []
myList.append(1)

elements_to_save = driver.find_elements(By.XPATH, "//*[@data-id='nba:schedule:main:team:link']")
for element in elements_to_save:
    f.write(" ")
    f.write(element.text)
    myList.append(element.text)
    f.write(" \n ")
    f.write(str(datetime.today()))

f.close()
f = open('result_file00.txt', 'r+')
print(f.read())
f.close()
print(myList)
print(type(myList))

time.sleep(1)
driver.get("https://www.nba.com/stats/teams/traditional")
element_to_search = driver.find_element(By.LINK_TEXT, myList[1])
parentof_element_to_search = element_to_search.parent
print(parentof_element_to_search.get_attribute("class")) # Error-giving line

driver.quit()

我试过 parentof_element_to_search = element_to_search.find_element(By.XPATH("..")) 来获取父元素。然后尝试使用 parentof_element_to_search.get_attribute("class") 获取该元素的父类导致相同的错误。

从这个结果中我想要的代码 sn-p 是获取 <tr> 中第 6 个 <td> 元素的值。 find_element(By.XPATH("//td[6]"),照片中的绿线。

简而言之,我得到团队名称的 <td> 行,然后返回到相同的 <tr> 标记并为 <td> 值获取 6 步。

【问题讨论】:

  • 因为这是 Python 中的 site:stackoverflow.com get_attribute SeleniumgetAttribute() in Javaget_attribute()、C# 中的GetAttribute()、Ruby 中的attribute()、JavaScript 中的getAttribute()以及Kotlin 中的getAttribute()。 ..

标签: python selenium selenium-webdriver xpath selenium-chromedriver


【解决方案1】:

您实际上并没有使用 parentof_element_to_search=element_to_search.find_element(By.XPATH("..")) 获取父元素
试试这个:

parent_of_element_to_search=element_to_search.find_element(By.XPATH("./.."))

现在你可以像下面这样在上面申请get_attribute()

parent_of_element_to_search=element_to_search.find_element(By.XPATH("./.."))
parent_element_classes = parent_of_element_to_search.get_attribute("class")

更新程序
这是我试过的

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.add_argument("start-maximized")

webdriver_service = Service('C:webdriverschromedriver.exe')
driver = webdriver.Chrome(service=webdriver_service, options=options)
wait = WebDriverWait(driver, 10)
url = 'https://www.nba.com/schedule?pd=false&region=1'
driver.get(url)

myList=[]
myList.append(1)
wait.until(EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler"))).click()
elements = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@data-id='nba:schedule:main:team:link']")))
for element in elements:
    myList.append(element.text)


driver.get("https://www.nba.com/stats/teams/traditional")
element_to_search = wait.until(EC.visibility_of_element_located((By.LINK_TEXT, myList[1])))
classes = element_to_search.find_element(By.XPATH, "./..").get_attribute("class")
print(classes)

这是我的程序运行的输出

Crom_text__NpR1_ Crom_primary__EajZu StatsTeamsTraditionalTable_primary__U2_3n Crom_stickySecondColumn__29Dwf

【讨论】:

  • 它给出了一个错误 parent_of_element_to_search=element_to_search.find_element(By.XPATH("./..")) TypeError: 'str' object is not callable`。这是否意味着我需要将 element_to_search 包装在 str() 方法中?
  • 请查看我更新的答案,让我看看我错过了什么
  • 如我所见tr 没有类属性。还有,可以根据子节点定位父节点,不用起床/..
  • 片刻。那么,它现在对您有用吗?问题已解决,还是出现错误?
  • 您的代码运行良好!只是最后的结果并没有给我我想要的。我的主要目的地是在同一 <tr 行到达第 6 <td
猜你喜欢
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多