【问题标题】:Selenium in Python cannot find a ButtonPython中的Selenium找不到按钮
【发布时间】: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


【解决方案1】:

您的 XPath 表达式不正确。它们包含命名空间“x”(我不知道你为什么把这个“x”放在表达式中)。所以解决方案只是从 XPath 表达式中删除“x”。见下文:

RedButtonXpath = "id('panel1-7')/div[1]/button"
BlackButtonXpath = "id('panel8-14')/div[1]/button"
GreenButtonXpath = "id('panel0-0')/div[1]/button"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2020-08-22
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多