为了账号安全,请及时绑定邮箱和手机立即绑定

找不到 Xpath 元素

找不到 Xpath 元素

白衣染霜花 2022-08-16 10:43:49
有人可以建议如何定位和元素在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 webdriverchrome_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()
查看完整描述

4 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

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


诱导WebDriver为所需的.frame_to_be_available_and_switch_to_it()

诱导WebDriver为所需的.element_to_be_clickable()

您可以使用以下任一定位器策略:


用: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


查看完整回答
反对 回复 2022-08-16
?
GCT1015

TA贡献1827条经验 获得超4个赞

我希望您正在切换到正确的iframe来获取元素...请参阅下面的示例


driver.switchTo().frame("content-frame")

driver.findElement(By.xpath("//div[@id='ember740']/div[2]/div/ol/li/div/button")

driver.switchTo().defaultContent()


查看完整回答
反对 回复 2022-08-16
?
ITMISS

TA贡献1871条经验 获得超8个赞

您需要首先获取iframe标签,然后像下面一样将驱动程序切换到它。

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))假设该驱动程序是 Webdriver 的正常实例。要继续使用默认内容,请执行driver.switch_to.default_content()

请参考此链接


查看完整回答
反对 回复 2022-08-16
?
Qyouu

TA贡献1786条经验 获得超11个赞

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


查看完整回答
反对 回复 2022-08-16
  • 4 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号