硒-无法对“文档”执行“评估”:该字符串不是有效的XPath表达式

时间:2019-08-20 09:17:46

标签: python python-3.x selenium xpath xpath-1.0

有以下页面。

http://remitly.com/us/en/

单击选项时,将显示一个包含国家/地区的列表。我尝试选择一个国家,例如哥伦比亚,然后单击它。但是我得到一个错误。

  

SyntaxError:无法在“文档”上执行“评估”:字符串   '// span [包含(@class,'md_countryName_fdxiah8'和text(),   'Colombia')]'不是有效的XPath表达式。

select = driver.find_element_by_class_name('f1wrnyr7')
select.click()
countries = driver.find_element_by_class_name('f1o6pohl')
country = countries.find_element_by_xpath("//span[contains(@class, 'md_countryName_fdxiah8' and text(), 'Colombia')]")

4 个答案:

答案 0 :(得分:1)

也许您正在尝试类似的操作(根据需要,如下更改xpaths):

请注意,文本节点应等于“哥伦比亚”: //span[contains(@class, 'md_countryName_fdxiah8') and text()='Colombia']

或者,文本节点可能包含一些长文本,但该文本中还应包含“哥伦比亚”:

//span[contains(@class, 'md_countryName_fdxiah8') and contains(text(), 'Colombia')]

答案 1 :(得分:1)

好像您忘了在页面上附加链接。无论如何,XPath表达式无效,更正后的版本可能是:

//span[contains(@class, 'md_countryName_fdxiah8') and text()='Colombia']\

您可以使用以下XML对其进行测试:

<span class="md_countryName_fdxiah8">Colombia</span>

结果:

Element='<span class="md_countryName_fdxiah8">Colombia</span>'

答案 2 :(得分:1)

此错误消息...

<div id="map-canvas"></div>

<hr>

<button id="button1">
Hide points
</button>
<button id="button2">
Show points
</button>

<hr>

<button id="button3">
Hide G
</button>
<button id="button4">
Show G
</button>

<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="//maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>

...表示您使用的 XPath 不是有效的 XPath 表达式。

您似乎很接近。您可以使用以下任一Locator Strategies

  • 使用 xpath 1

    SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//span[contains(@class, 'md_countryName_fdxiah8' and text(), 'Colombia')]' is not a valid XPath expression.
    
  • 使用 xpath 2

    country = countries.find_element_by_xpath("//span[contains(@class, 'md_countryName_fdxiah8') and text()='Colombia']")
    
  

在这里您可以找到有关SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//img[contains('1236548597')]' is not a valid XPath expression的相关讨论


更新

要克服元素不可见错误,您需要为country = countries.find_element_by_xpath("//span[contains(@class, 'md_countryName_fdxiah8') and contains(., 'Colombia')]") 引入 WebDriverWait ,并且可以使用以下任意一种 Locator Strategy

visibility_of_element_located()

答案 3 :(得分:0)

根据我的经验,使用Select函数对象可以更好地处理Select元素。然后,每个列表竞争都可以通过其文本来解决

您应该导入:

from selenium.webdriver.support.ui import Select

然后

select = Select(driver.find_element_by_class_name('f1wrnyr7'))
select.select_by_visible_text('Colombia')