2017-09-09 43 views
3

我正在嘗試導航到Centrebet,如果導航菜單在體育下不存在,那麼我想單擊運動。我有下面的代碼,雖然它一直給無效的選擇器。如果顯示元素,找不到元素的選擇器無效

element = driver.find_element_by_xpath("//ul[id*='accordionMenu1_ulSports'][style*='display: none;']") 
if element.is_displayed(): 
    element = driver.find_element_by_xpath(".//a[@class ='head-style3'][contains(text(), 'Sports')]").click() 

我也曾嘗試使用

element = driver.find_element_by_xpath(".//*[@id = 'accordionMenu1_ulSports'][contains(text(), 'Soccer')]") 
if element.is_not_displayed(): 
    element = driver.find_element_by_xpath(".//a[@class ='head-style3'][contains(text(), 'Sports')]").click() 

它一直給無效選擇任何想法​​?由於enter image description here

+0

而不是'驅動器.find_element_by_xpath(「.// a [@class ='head-style3'] [contains(text(),'Sports')]」)。c lick()'使用'element.find_element_by_xpath(「.// a [@class ='head-style3'] [contains(text(),'Sports')]」)。click()'。同時在你的問題中發佈完整的例外細節 –

+0

@TarunLalwani它似乎通過不點擊來執行作業。是否如果element.is_displayed():不是一種可行的方法?沒有錯誤 – Tetora

回答

1

你的第一個XPath

"//ul[id*='accordionMenu1_ulSports'][style*='display: none;']" 

是XPath和CSS選擇器的組合。純XPath的應該看起來像

"//ul[contains(@id, 'accordionMenu1_ulSports') and contains(@style, 'display: none;')]" 

你的第二個XPath

".//*[@id = 'accordionMenu1_ulSports'][contains(text(), 'Soccer')] 

不會匹配需要ul,因爲它沒有文本節點"Soccer" - 它是同級鏈接的文本內容...

嘗試

//ul[@id='accordionMenu1_ulSports' and ./preceding-sibling::a[.='Soccer']] 

此外webElement沒有s uch屬性爲is_not_displayed()。我想你應該嘗試not element.is_displayed()

完整的代碼應該看起來像

element = driver.find_element_by_xpath("//ul[@id='accordionMenu1_ulSports' and ./preceding-sibling::a[.='Soccer']]") 
if not element.is_displayed(): 
    element = driver.find_element_by_xpath(".//a[@class ='head-style3'][contains(text(), 'Sports')]") 
    element.click() 

更新

要知道"Soccer"元素是否可以訪問你可以只檢查"Sports""display"風格值:

sports = driver.find_element_by_id("accordionMenu1_ulSports") 
if sports.get_attribute("style") == "display: none;": 
    driver.find_element_by_xpath('//ul[@id="menu_acc"]/li[3]/a').click() 

soccer = driver.find_element_by_link_text("SOCCER") 
+0

無法找到元素:{「method」:「xpath」,「selector」:「// ul [@ id ='accordionMenu1_ulSports'and ./preceding-sibling::[[=='Soccer']] 「} – Tetora

+0

如果」Sports「列表未打開,您確定DOM中存在所需元素(」足球「)嗎?我無法檢查它,因爲我無法訪問網站... – Andersson

+0

您可以免費下載無區塊或使用setupvpn(擴展名),以使用澳大利亞IP訪問它。是33行,在 element = driver.find_element_by_xpath(「// ul [@ id ='accordionMenu1_ulSports'and ./preceding-sibling::[[=='Soccer']]」)似乎給了這個問題。 element = driver.find_element_by_xpath(「.//*[@ data-type ='sports_l1'] [contains(text(),'Soccer')]」)的作品。我很好奇爲什麼這是給錯誤 – Tetora