通过Selenium和Python查找提交按钮时发生InvalidSelectorException

时间:2018-08-04 21:16:23

标签: python selenium selenium-webdriver xpath invalidselectorexception

我没法在网页上点击按钮。

在chrome浏览器中使用硒进行python编码。

我在chrome inspect中找到了xpath。

chrome检查xpath: 注意:这似乎是exportbutton-xxxx-btnInnerEl之后的动态路径。

//*[@id="exportbutton-1102-btnInnerEl"]

我尝试了10种不同的xpath格式,并且离选择要在网站上运行报告的按钮越来越近了。我的测试用例只是要在此页面上按下按钮以导出某个日期。

这是html中的buttonn元素

<span id="exportbutton-1102-btnInnerEl" class="x-btn-inner" style="height: 23px; line-height: 23px;">Export Tickets</span>

按顺序从python输出运行错误:

submit_button = driver.find_elements_by_xpath('//*[contains(@id,’exportbutton’)]')

在python中运行错误

submit_button = driver.find_elements_by_xpath('//*[contains(@id,’exportbutton’)]')
return self.find_elements(by=By.XPATH, value=xpath) 'value': value})['value']
self.error_handler.check_response(response)
  raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Unable to locate an element with the xpath expression //*[contains(@id,’exportbutton’)] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//*[contains(@id,’exportbutton’)]' is not a valid XPath expression.
  (Session info: chrome=67.0.3396.99)
  (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 10.0.17134 x86_64)

谢谢

3 个答案:

答案 0 :(得分:0)

’exportbutton’周围的撇号无效。并且还应该将它们加倍以将其与xpath表达式的其余部分分开

submit_button = driver.find_elements_by_xpath('//*[contains(@id ,"exportbutton")]')

答案 1 :(得分:0)

使用find_elements将为您提供Web元素列表。并且异常跟踪显示 xpath 由于无效:

如果要单击按钮,可以参考以下代码:

submit_button = driver.find_elements_by_xpath("//button[contains(@id,'exportbutton')]")
submit_button[0].click()  

希望这会对您有所帮助。

答案 2 :(得分:0)

此错误消息...

selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Unable to locate an element with the xpath expression //*[contains(@id,’exportbutton’)] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//*[contains(@id,’exportbutton’)]' is not a valid XPath expression.

.......暗示您构造的Locator Strategy不是有效的定位器。

错误的主要原因是存在字符。相反,您可以在 xpath 中使用'字符。

不过,根据您提供的 HTML 来标识文本为 Export Tickets 的元素,您可以使用以下解决方案:

submit_button = driver.find_element_by_xpath("//span[@class='x-btn-inner' and contains(.,'Export Tickets')][starts-with(@id,'exportbutton-')]")