2016-03-22 52 views
0

現在我在使用Python中的Selenium時遇到了問題。這是我第一次使用它,所以如果我正在做一些可怕的錯誤,請告訴我。無論如何,我希望下面的腳本點擊網站上的按鈕。並不難看起來,但由於某種原因它總是給我這個錯誤:Python中的硒無法找到一個按鈕

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/[email protected]/components/driver-component.js:10744) 
    at FirefoxDriver.prototype.findElementInternal_ (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/[email protected]/components/driver-component.js:10775) 
    at FirefoxDriver.prototype.findElement (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/[email protected]/components/driver-component.js:10779) 
    at DelayedCommand.prototype.executeInternal_/h (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/[email protected]/components/command-processor.js:12661) 
    at DelayedCommand.prototype.executeInternal_ (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/[email protected]/components/command-processor.js:12666) 
    at DelayedCommand.prototype.execute/< (file:///C:/Users/USER/AppData/Local/Temp/tmpd47h5z77/extensions/[email protected]/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不是問題。

(另外,請告訴我,如果你看到任何方式,以加快或使腳本以任何方式更有效。)

+0

一件事你可以做的就是從傾倒硒的webdriver的HTML。 – Mai

+0

@Mai你如何做到這一點? – RedShadow

+0

你確定你的應用程序的HTML有一個自定義命名空間「x」? – Buaban

回答

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"