有以下页面。
单击选项时,将显示一个包含国家/地区的列表。我尝试选择一个国家,例如哥伦比亚,然后单击它。但是我得到一个错误。
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')]")
答案 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')