2015-05-16 25 views
0

這對我來說有點令人頭痛的錯誤。我試圖用硒尋找元素,但偶爾我得到該表達式不是合法表達式錯誤 - 即使我直接從瀏覽器中複製並粘貼XPATH(並轉義所有單引號)。Selenium - 從XPath Helper複製XPATH並粘貼 - 「該表達式不是一個合法的表達式」

爲什麼會這樣呢?我直接從網頁複製XPATH。

感謝您的幫助!

例如。據XPath的助手:這是第一個結果在YouTube搜索標題的XPATH:

/html[@class='guide-pinned show-guide no-focus-outline']/body[@id='body']/div[@id='body-container']/div[@id='page-container']/div[@id='page']/div[@id='content']/div[@class='branded-page-v2-container branded-page-base-bold-titles branded-page-v2-container-flex-width']/div[@class='branded-page-v2-col-container']/div[@class='branded-page-v2-col-container-inner']/div[@class='branded-page-v2-primary-col']/div[@class=' yt-card clearfix']/div[@class='branded-page-v2-body branded-page-v2-primary-column-content']/div[@id='results']/ol[@id='section-list-961996']/li/ol[@id='item-section-948865']/li[1]/div[@class='yt-lockup yt-lockup-tile yt-lockup-video vve-check clearfix yt-uix-tile']/div[@class='yt-lockup-dismissable']/div[@class='yt-lockup-content']/h3[@class='yt-lockup-title']/a[@class='yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 yt-uix-sessionlink  spf-link '] 

Here's how I get the XPATH

我知道這個方法不一定是一般,但我期待它的工作中至少完全匹配的情況。

在Python中,我的代碼是:

first_result_xpath = #the XPATH above with single quotes escaped 

try: 
    first_result_element = driver.find_element(By.XPATH, first_result_xpath) 
except: 
    print "Exception: Could not locate element" 
+2

你能提供可再現的例子嗎?謝謝。 – alecxe

+0

當然,會做。一秒 – newbie

+1

發佈你正在處理的實際'html'通常是個好主意。這使調試更容易。另一方面,使用瀏覽器從網頁複製xpath始終不是個好主意,因爲doc結構可以很容易地更改並且使您所複製的xpath無效 – Saifur

回答

1

我不完全知道什麼是錯的XPath選擇。它看起來有效,但由於兩個問題,它不是一個好的選擇器:
1.頁面結構可能會改變,並會使選擇器無效。
2.選擇器的這一部分,/ol[@id='item-section-948865'],很可能在頁面加載時生成。

一個更好的選擇,你可以使用如下:

(//a[@class='yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 yt-uix-sessionlink  spf-link '])[1] 

這將返回//a[@class=""]選擇的第一個結果。使用()[n]將返回()中選擇器的第n個結果。

爲了簡潔起見,此XPath選擇也可用來尋找一個搜索結果的第一個環節:

(//a[contains(@class,'yt-uix-tile-link')])[1]