首页 > 解决方案 > Selenium 无法定位动态元素

问题描述

我试图通过搜索 xpath、outerhtml、扩展 xpath、css 选择器、类名等来在屏幕截图中找到这个元素。我正在自动化一个程序以从网站下载 pdf,但由于某种原因,我需要单击以下载它的元素是动态元素。这是我的代码(我已审查敏感信息):

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
username = "***"
password = '***'

driver = webdriver.Chrome()
def info_fill():
    driver.get ('***')
    driver.find_element_by_xpath('//*[@id="fsLoginUsernameField1249"]').send_keys(username)
    driver.find_element_by_xpath ('//*[@id="fsLoginPasswordField1249"]').send_keys(password)

def login():
    driver.find_element_by_xpath('//*[@id="fsEl_1249"]/div/div[1]/form/input[5]').click()

def portal():
    time.sleep(4)
    driver.get('***')

def get_grade_doc():
    time.sleep(4)
    driver.find_element_by_xpath('//*[@id="navigation-top"]/ic-sidebar/div/ic-tool-list/nav/ul/li[5]/a').click()
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "/html/body/iframe[@id='xh-bar']"))
        )
    finally:
        driver.find_element_by_xpath("/html/body/iframe[@id='xh-bar']").click()


info_fill()
login()
portal()
get_grade_doc()
driver.quit()

这是网络检查器的屏幕截图。我要定位的元素被突出显示。

检查员.jpeg

这是我收到的错误消息

<li _ngcontent-pts-c11="" class="divider__content documents__row clickable 
flex--space-between" role="link" tabindex="0"><div _ngcontent-pts-c11="" 
class="pr-4 float-left"><div _ngcontent-pts-c11="">Gradebook Detail - 
November 2020</div><!----><!----><!----><!----><div _ngcontent-pts-c11="" 
class="text-secondary pt-1">  </div><!----><div _ngcontent-pts-c11="" 
class="text-secondary pt-1"> 20-21 Upper<!----></div><!----><!----></div><div 
_ngcontent-pts-c11="" class="hide-tiny float-right"><!----><i _ngcontent-pts- 
c11="" class="fa fa-chevron-right fa-light float-right"></i></div><i 
_ngcontent- 
pts-c11="" class="fa fa-chevron-right fa-light float-right hide-until-tiny"> 
</i></li>

标签: pythonseleniumautomation

解决方案


您的元素位于 iframe 中。这个问题之前已经回答过很多次了。 通过 Selenium 和 python 切换到 iframe

# driver.switch_to.frame(‘frame_id’)
driver.switch_to.frame("xh-bar")

或这个:

iframe = driver.find_element_by_xpath("//html/body/iframe[@id='xh-bar']")
driver.switch_to.frame(iframe)

推荐阅读