当前位置: 首页 > 知识库问答 >
问题:

如何使用Selenium和Python定位span元素

傅丁雷
2023-03-14

我试图找到以下元素:

<span class="btn btn-default" onclick="close_terms_window();" style="" xpath="1">Next</span>

使用selenium webdriver。但我得到的信息是:

消息:没有这样的元素:无法定位元素:{"方法":"xpath","选择器":"//div[@id='terms-modal']/div//[@id='接受条款']//[@onClick="close_terms_window();"]"} (会话信息: chrome=74.0.3729.131)(驱动程序信息: chrome驱动程序=2.46.628402 (536cd7adbad73a3783fdc2Cab92ab2ba7ec361e1),平台=Windows NT 10.0.17134x86_64)

我使用了以下方法:

方法一:

time.sleep(4) 
element_term = driver.find_element_by_xpath("//div[@id='terms-modal']/div//* [@id='acceptterms']//span[@onclick=\"close_terms_window();\"]")

方法2:

element_term = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,"//span[contains(@class,'btn') and contains(@class,'btn-default)]")))`

方法三:

time.sleep(1)
element_term = driver.find_element_by_xpath("//div[@id='terms-modal']/div//*[@id='acceptterms']//*[@onclick=\"close_terms_window();\"]")

方法4:

使用CSS选择器:

time.sleep(4)
driver.find_element_by_css_selector("span.btn btn-default")
element_term = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,"//span[contains(@class,'btn') and contains(@class,'btn-default)]")))

源代码快照:https://i.stack.imgur.com/tib3V.png

共有2个答案

严曜文
2023-03-14

由于该元素位于模式对话框中,要定位并单击该元素,您必须引导WebDriverWait使元素成为可单击的(),您可以使用以下任一解决方案:

>

  • 使用CSS\U选择器:

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.btn.btn-default[onclick^='close_terms_window']")))
    

    使用XPATH:

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='btn btn-default' and starts-with(@onclick,'close_terms_window')][contains(., 'Next')]")))
    

    注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

  • 严修德
    2023-03-14
    from selenium.webdriver.support import expected_conditions as EC
    
    
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[@class='btn btn-default')))
    

    预期条件:

    这些是自动化Web应用程序时经常使用的一些常见条件。

    Selenium Python绑定提供了一些方便的方法,因此您不必自己编写预期的\u条件类或为它们创建自己的实用程序包。

    • title\u是
     类似资料:
    • 我希望上面的xpath的输出能够定位selenium中的元素,但实际上我得到了错误。

    • 因此,我一直在尝试使用selenium在python上定位用户名输入框。我尝试了xpath、id、类名等。 我还知道显式等待元素加载。然而,尽管如此,没有运气。我检查了元素是否在我忽略的iframe中,但找不到它。 这是用户输入框元素。 下面是我为定位元素而编写的代码。

    • 问题内容: 我正在尝试搜寻房地产网站上的商品。它有一个aspx表单,必须在提交之前填写。 http://www.cbre.us/PropertyListings/Pages/Properties-for- Sale.aspx 我只关心俄勒冈州的多户家庭财产。所以这是我的第一次尝试: 当我运行此脚本时,出现错误“找不到元素“ ForSalePropertyType”。在这里我在做什么错? 问题答案:

    • 我有一个粘性导航栏,它有几个列表元素,每个元素都包含href元素。当我试图定位元素时,我得到了错误。以下是我的HTML代码: 我想通过Webdriver定位Academic,我遇到这样的错误无法定位元素。

    • 我喜欢在我的自动化框架中使用带有FindBy注释的PageFactory来自动定位我的页面对象类中的元素。 我有一个WebElement,我需要能够指定几个不同的定位器。我以为FindBys是我的解决方案,但显然这不是它的工作方式。它相当于Driver.FindElement(option1).FindElement.(option2)。那不是我需要的。我需要的东西,将找到一个元素的一个或其他定位

    • 我正在尝试使用Python和Selenium获取此元素。 这就是我所尝试的: 我做错了什么?