2015-05-16 23 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]