找不到Xpath元素

2024-05-19 06:45:53 发布

您现在位置:Python中文网/ 问答频道 /正文

您好,我对selenium是个新手。如果我在下面遇到错误,请有人建议如何在iframe中定位和元素

我试图在Salesforce Pardot页面上实现一个自动化脚本,有两个iframe,我想访问第一个iframe标签上的按钮并单击相同的按钮

Error:- selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[starts-with(@class,'slds-button_reset')]"} (Session info: chrome=80.0.3987.122)

Screenshot for DOM Button Element

Screenshot for DOM Button Element along with Iframe tag

以前编写的代码

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
prefs = {'download.default_directory': r'C:\Pardot'}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(executable_path="D:\XXX XXXX\XXXX\drivers\chromedriver.exe", options=chrome_options)
driver.get('https://pi.pardot.com/engagementStudio/studio#/15627/reporting')
user_name = driver.find_element_by_css_selector('#email_address')
user_name.send_keys('XXXXXXXXXXXXXXXXXXX')
password = driver.find_element_by_css_selector('#password')
password.send_keys('XXXXXXXXXXXXXXXXX)
submit_button = driver.find_element_by_css_selector('input.btn')
submit_button.click()
iframe_list =  driver.find_elements_by_tag_name("iframe")
driver.switch_to.frame(iframe_list[0])
driver.find_element_by_xpath("//*[starts-with(@class,'slds-button_reset')]")
driver.close()

Tags: namebydriverseleniumwithbuttonelementfind
3条回答

试试这个: //李[@id='ember943']

由于所需元素位于<iframe>内,因此要在元素上调用click(),您必须:

  • 为所需的frame_to_be_available_and_switch_to_it()诱导WebDriverWait
  • 为所需的element_to_be_clickable()诱导WebDriverWait
  • 您可以使用以下任一Locator Strategies

    • 使用CSS_SELECTOR

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#content-frame")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[data-qa='reporting-filter-trigger-toggle'][data-ember-action]"))).click()
      
    • 使用XPATH

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='content-frame']")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[@data-qa='reporting-filter-trigger-toggle' and @data-ember-action]"))).click()
      
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

参考文献

您可以在以下内容中找到一些相关讨论:

您需要首先获得iframe标记,并将驱动程序切换到它,如下所示

driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) 假设驱动程序是webdriver的健康实例。要继续使用默认内容,请执行以下操作: driver.switch_to.default_content()

请参阅this link

相关问题 更多 >

    热门问题