猿问

找不到 Xpath 元素

有人可以建议如何定位和元素在iframe asi下面得到错误。

我正在尝试在Salesforce Pardot页面上实现自动化脚本,并且有2个iframe,我想访问1st iframe Tag上的按钮并单击相同的内容。

错误:- 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)

DOM 按钮元素的屏幕截图

DOM 按钮元素以及 Iframe 标记的屏幕截图

以前编写的代码

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()


白衣染霜花
浏览 176回答 4
4回答

肥皂起泡泡

由于所需的元素位于要在元素上调用的 so 中,因此您必须:<iframe>click()诱导WebDriver为所需的.frame_to_be_available_and_switch_to_it()诱导WebDriver为所需的.element_to_be_clickable()您可以使用以下任一定位器策略:用:CSS_SELECTORWebDriverWait(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()用:XPATHWebDriverWait(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 WebDriverWaitfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as EC

GCT1015

我希望您正在切换到正确的iframe来获取元素...请参阅下面的示例driver.switchTo().frame("content-frame")driver.findElement(By.xpath("//div[@id='ember740']/div[2]/div/ol/li/div/button")driver.switchTo().defaultContent()

ITMISS

您需要首先获取iframe标签,然后像下面一样将驱动程序切换到它。driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))假设该驱动程序是 Webdriver 的正常实例。要继续使用默认内容,请执行driver.switch_to.default_content()请参考此链接

Qyouu

试试这个 : //li[@id='ember943']
随时随地看视频慕课网APP

相关分类

Python
我要回答