消息:没有这样的元素:无法找到元素 Selenium Python

我试图点击一个按钮,但收到此错误消息:我试图点击的元素确实存在于页面上,但我不确定为什么它说该元素不存在:


Message: no such element: Unable to locate element: {"method":"xpath","selector":"//button[@class="vote_button mfp-voteText"]"}

下面是我的代码:


driver.get('https://trupanion.com/canada/members/contest?pixlee_album_photo_id=427049511')


time.sleep(10)


try:

    vote = driver.find_element_by_xpath('//button[@class="vote_button mfp-voteText"]')

    vote.click()

except Exception as e:

    print(e)

下面是 chrome 开发工具中的 XPath,显示它是正确的:

http://img3.mukewang.com/64082c280001451706570177.jpg

凤凰求蛊
浏览 93回答 3
3回答

交互式爱情

所需的元素在 中,<iframe>因此您必须:诱导WebDriverWait以等待所需的框架可用并切换到它。诱导WebDriverWait使所需的元素可点击。您可以使用以下任一定位器策略:使用CSS_SELECTOR:driver.get('https://trupanion.com/members/contest?pixlee_album_photo_id=427049511')WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#pixlee_lightbox_iframe")))WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.vote_button.mfp-voteText"))).send_keys("test")使用XPATH:driver.get("https://trupanion.com/members/contest?pixlee_album_photo_id=427049511")WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='pixlee_lightbox_iframe']")))WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='vote_button mfp-voteText']"))).click()注意:您必须添加以下导入:from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as EC浏览器快照:

子衿沉夜

尝试使用css selector而不是XPATH使用函数WebdriverWait()。它将等待 X 秒让元素可点击,并在元素出现后立即点击它。但是,您需要切换到必须通过选择器找到的框架frame。from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECself.webdriver.switch_to_frame(self.webdriver.find_element_by_css_selector('frame'))try:&nbsp; &nbsp; WebDriverWait(webdriver,time).until(EC.element_to_be_clickable((By.CSS_SELECTOR,path)))except Exception as e:&nbsp; &nbsp;print(e)

噜噜哒

它在<frame>标签内,先切换它:driver.get('https://trupanion.com/canada/members/contest?pixlee_album_photo_id=427049511')time.sleep(10)try:&nbsp; &nbsp; #switch it first&nbsp; &nbsp; driver.switch_to.frame(driver.find_element_by_id('pixlee_lightbox_iframe'))&nbsp; &nbsp; vote = driver.find_element_by_xpath('//button[@class="vote_button mfp-voteText"]')&nbsp; &nbsp; vote.click()except Exception as e:&nbsp; &nbsp; print(e)但是注意time.sleep(..)是个坏主意。您可以在这里学习硒等待:selenium-python.readthedocs.io/waits.html并切换一个框架:.frame_to_be_available_and_switch_to_it尽管您的 xpath 可以工作,但 css 选择器看起来更好:vote = driver.find_element_by_css_selector('button.vote_button.mfp-voteText')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python