【发布时间】:2016-03-22 00:19:51
【问题描述】:
现在我在 Python 中使用 Selenium 时遇到问题。这是我第一次使用它,所以如果我做错了什么,请告诉我。无论如何,我希望下面的脚本单击网站上的按钮。看起来并不难,但由于某种原因,它总是给我这个错误:
selenium.common.exceptions.InvalidSelectorException was unhandled by user code
Message: Message: The given selector id('panel1-7')/x:div[1]/x:button is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: Unable to locate an element with the xpath expression id('panel1-7')/x:div[1]/x:button because of the following error:
NamespaceError: An attempt was made to create or change an object in a way which is incorrect with regard to namespaces
Stacktrace:
at FirefoxDriver.annotateInvalidSelectorError_ (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/fxdriver@googlecode.com/components/driver-component.js:10744)
at FirefoxDriver.prototype.findElementInternal_ (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/fxdriver@googlecode.com/components/driver-component.js:10775)
at FirefoxDriver.prototype.findElement (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/fxdriver@googlecode.com/components/driver-component.js:10779)
at DelayedCommand.prototype.executeInternal_/h (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
at DelayedCommand.prototype.executeInternal_ (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
at DelayedCommand.prototype.execute/< (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
这是我正在使用的代码
##Import Modules
##
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import unittest
import time
##Initialize and Define Variables
##
driver = webdriver.Firefox()
##Open up webpage
driver.get("http://PretendThisIsTheTargetWebsitePlease.com")
RedButtonXpath = "id('panel1-7')/x:div[1]/x:button"
BlackButtonXpath = "id('panel8-14')/x:div[1]/x:button"
GreenButtonXpath = "id('panel0-0')/x:div[1]/x:button"
RedButtonFieldElement = WebDriverWait(driver, 2).until(lambda driver: driver.find_element_by_xpath(RedButtonXpath))
BlackButtonFieldElement = WebDriverWait(driver, 2).until(lambda driver: driver.find_element_by_xpath(BlackButtonXpath))
GreenButtonFieldElement = WebDriverWait(driver, 2).until(lambda driver: driver.find_element_by_xpath(GreenButtonXpath))
##Main Loop
##
input = input("Generic answer here please! :D >>> ")
出于隐私原因,我更改了我正在使用的网站,但据我所知,实际的 XPath 不是问题。
(另外,请告诉我您是否发现了任何可以加快或提高脚本效率的方法。)
【问题讨论】:
-
您可以做的一件事是在查找按钮之前从 selenium webdriver 中转储 html,这样您就可以在调用查找器时检查它们是否真的存在。
-
@Mai 你是怎么做到的?
-
您确定您的应用程序的 HTML 具有自定义命名空间“x”吗?
-
@Buaban 不,不是,非常感谢。你的回答解决了一切。
标签: python python-3.x selenium xpath selenium-webdriver