在 Python Selenium 的 xpath 中使用变量
Posted
技术标签:
【中文标题】在 Python Selenium 的 xpath 中使用变量【英文标题】:Using a variable in xpath in Python Selenium 【发布时间】:2015-12-28 17:42:37 【问题描述】:我一直无法弄清楚如何让变量工作 Selenium。这篇文章似乎有所帮助 (Variable not working inside parenthesis),但我仍然无法正常工作。
当我使用实际值时,它会起作用。在这种情况下,阿拉巴马州。我创建了一个名为 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]"
【问题讨论】:
我将@EGHM 的帖子标记为答案。但是对于那些可能能够使用这些信息的人,我确实发现 Select 也确实有效。我使用了 Select(driver.find_element_by_class_name("c3")).select_by_visible_text(state)。不确定我是否应该将代码放在评论中。 @shavar 使用 Select 抽象确实是解决问题的更简洁的方法。 @alecxe 感谢您的意见。我很好奇 Select 是否是首选方法。在可能的情况下,我将使用 Select 抽象。当然,我还得再读一读它的用法。 【参考方案1】:值周围的单引号不存在于您的编码方式中。试试:
driver.find_element_by_xpath("//option[@value='" + state + "']").click()
【讨论】:
是的,做到了。所以我猜它没有把它当作一个字符串来读?这将对我的其他项目有所帮助。谢谢。 我认为 python 将其作为字符串读取。我从大量经验中知道,Selenium 需要等号后的值周围的引号。 超级有用。谢谢。【参考方案2】:如果您仍然想使用单引号,那么您也可以尝试这个答案。检查它是否有帮助:
driver.find_element_by_xpath('//option[@value=\'State_Name\']'.format(State_Name=State)).click()
或者干脆
driver.find_element_by_xpath('//option[@value=\'\']'.format(State)).click()
您可以在函数中将“状态”作为参数传递。
【讨论】:
【参考方案3】:使用Selenium 和python 对元素上的click()
使用<option>
标签的变量value 属性,您可以使用以下任一Locator Strategies:
在XPATH
中使用变量:
state = 'AL-Alabama'
driver.find_element_by_xpath("//option[@value='" +state+ "']").click()
在XPATH
中使用%s
:
state = 'AL-Alabama'
driver.find_element_by_xpath("//option[@value='%s']"% str(state)).click()
在XPATH
中使用format()
:
state = 'AL-Alabama'
driver.find_element_by_xpath("//option[@value='']".format(str(state))).click()
最佳实践
理想情况下。使用 Selenium] 相对于 <option>
标记的变量 value 属性到元素上的 click()
并且您需要为 @987654339 诱导 WebDriverWait @ 并且您可以使用以下任一Locator Strategies:
在XPATH
中使用变量:
state = 'AL-Alabama'
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='" +state+ "']"))).click()
在XPATH
中使用%s
:
state = 'AL-Alabama'
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='%s']"% str(state)))).click()
在XPATH
中使用format()
:
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
参考
您可以在以下位置找到一些相关讨论:
How to find an element with respect to the user input using Selenium and Python?【讨论】:
以上是关于在 Python Selenium 的 xpath 中使用变量的主要内容,如果未能解决你的问题,请参考以下文章