在Python Selenium中使用xpath中的变量

在Python Selenium中使用xpath中的变量,python,variables,selenium,selenium-webdriver,Python,Variables,Selenium,Selenium Webdriver,我一直很难弄清楚如何让变量工作。这篇文章似乎对我有所帮助,但我还是无法让它发挥作用 当我使用实际值时,它是有效的。在本案中,阿拉巴马州。我创建了一个名为state的变量,这样我就可以调用 这是我的职责。我要穿越13个州 driver.find_element_by_xpath("//option[@value='AL-Alabama']").click() 这个函数使用state变量,在查看错误消息时,它将变量值显示为AL-Alabama。看来 它在网页中引用了正确的值。我不知道我错过了什么,

我一直很难弄清楚如何让变量工作。这篇文章似乎对我有所帮助,但我还是无法让它发挥作用

当我使用实际值时,它是有效的。在本案中,阿拉巴马州。我创建了一个名为state的变量,这样我就可以调用 这是我的职责。我要穿越13个州

driver.find_element_by_xpath("//option[@value='AL-Alabama']").click()
这个函数使用state变量,在查看错误消息时,它将变量值显示为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]"}

值周围的单引号与编码方式不符。尝试:

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

如果你仍然想使用单引号,那么你也可以试试这个答案。检查是否有帮助:

driver.find_element_by_xpath('//option[@value=\'{State_Name}\']'.format(State_Name=State)).click()
或者干脆

driver.find_element_by_xpath('//option[@value=\'{}\']'.format(State)).click()
您可以在函数中将“State”作为参数传递。

单击元素上与
标记的变量值属性相关的
,并且您可以使用以下任一项:

  • 在XPATH中使用变量:

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

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

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

最佳做法 理想情况下。要想
单击元素上与
标记的variable value属性相关的
,请使用Selenium],您需要将
元素归纳为可单击的()
,您可以使用以下任一选项:

  • 在XPATH中使用变量:

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

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

    state = 'AL-Alabama'
    driver.find_element_by_xpath("//option[@value='" +state+ "']").click()
    
    state = 'AL-Alabama'
    driver.find_element_by_xpath("//option[@value='%s']"% str(state)).click()
    
    state = 'AL-Alabama'
    driver.find_element_by_xpath("//option[@value='{}']".format(str(state))).click()
    
    state = 'AL-Alabama'
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='" +state+ "']"))).click()
    
    state = 'AL-Alabama'
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='%s']"% str(state)))).click()
    
    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
    

参考文献 您可以在以下内容中找到一些相关讨论:


是的,就是这样。所以我猜它不是把它当作字符串来读的?这将有助于我的其他项目。谢谢。我想python是把它当作字符串来读的。我从大量的经验中了解到,Selenium.Super-help需要在等号后引用这些值。谢谢。我在帖子上用@EGHM作为答案。但是对于那些能够使用这些信息的人,我确实发现Select也确实有效。我使用了Select(driver.find_element_by_class_name(“c3”))。Select_by_visible_text(state)。不确定我是否应该将代码放在注释中。@shavar使用Select抽象确实是解决问题的一种更简洁的方法。@alecxe我感谢您的输入。我很好奇Select是否是首选方法。在可能的情况下,我将使用Select抽象。当然,我还得多读一点关于它的用法。