这对我来说有点令人烦恼。我正在尝试使用selenium来查找元素,但偶尔我会得到表达式不是法律表达式错误 - 即使我直接从浏览器复制并粘贴XPATH(并转义所有单引号)
为什么会这样?我正在直接从网页上复制XPATH。
感谢您的帮助!
例如。根据XPath Helper:以下是YouTube搜索引擎优化搜索中第一个结果的标题:
/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 ']
我知道这种方法不一定是通用的,但我希望它至少可以在完全匹配的情况下工作。
在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"
答案 0 :(得分: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]