在 Python Selenium 的 xpath 中使用变量

新手上路,请多包涵

我一直无法弄清楚如何让变量在 Selenium 中工作。这篇文章似乎有所帮助( 变量在括号内不起作用)但我仍然无法让它工作。

当我使用它的实际值时。在这种情况下,阿拉巴马州。我创建了一个名为 state 的变量,这样我就可以在我的函数中调用它。我有 13 个州要经过。

 driver.find_element_by_xpath("//option[@value='AL-Alabama']").click()

这个使用状态变量,在查看错误消息时,它显示变量值为 AL-Alabama。所以它似乎在网页中引用了正确的值。不确定我遗漏了什么或为什么它不起作用。任何指导将不胜感激。

 driver.find_element_by_xpath('//option[@value=' + state + ']').click()
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//option[@value=AL-Alabama]"}

原文由 shavar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 879
2 个回答

该值周围的单引号不存在于您的编码方式中。尝试:

 driver.find_element_by_xpath("//option[@value='" + state + "']").click()

原文由 EGHM 发布,翻译遵循 CC BY-SA 3.0 许可协议

click() 在元素上关于 <option> 标签的变量 属性,使用 Seleniumpython ,您可以使用以下任一 定位器策略

  • XPATH 中使用变量:
   state = 'AL-Alabama'
  driver.find_element_by_xpath("//option[@value='" +state+ "']").click()

  • %s XPATH
   state = 'AL-Alabama'
  driver.find_element_by_xpath("//option[@value='%s']"% str(state)).click()

  • format() XPATH
   state = 'AL-Alabama'
  driver.find_element_by_xpath("//option[@value='{}']".format(str(state))).click()


最佳实践

理想情况下。到 click() 在元素上关于 <option> 标签使用 Selenium] 的变量 属性,你需要为 element_to_be_clickable() 诱导 WebDriverWait 使用以下任一 定位器策略

  • XPATH 中使用变量:
   state = 'AL-Alabama'
  WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='" +state+ "']"))).click()

  • %s XPATH
   state = 'AL-Alabama'
  WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='%s']"% str(state)))).click()

  • format() XPATH
   state = 'AL-Alabama'
  WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='{}']".format(str(state))))).click()

  • 注意:您必须添加以下导入:
   from selenium.webdriver.support.ui import WebDriverWait
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support import expected_conditions as EC


参考

您可以在以下位置找到几个相关的讨论:

原文由 undetected Selenium 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题