0


selenium中定位的问题笔记

(@class, "login-button") 和class="el-input__inner",是定位中的两种写法吗?

是的,这两种写法分别用于不同的场景和定位策略,在Selenium中用来定位页面元素。
(@class, "login-button"):这种写法看起来像是使用某种特定框架或库的定位语法,但并不直接对应Selenium的标准定位方式。在标准的Selenium中,如果你想要根据类名定位元素,通常会直接使用类名作为参数,如By.CLASS_NAME。不过,这可能是某些自定义封装或特定于框架的写法,意在通过类名定位元素,只是表达形式有所不同。
class="el-input__inner":这是HTML中元素的一个属性值,直接指定了元素的类名。在Selenium中,你可以使用这个类名来定位元素,通常通过以下几种方式:

使用By.CLASS_NAME定位器,如果类名在整个页面中是唯一的:

     element = driver.find_element(By.CLASS_NAME, "el-input__inner")
     

或者,如果需要更复杂的定位,可以使用CSS选择器或XPath,例如:

     # CSS选择器
     element = driver.find_element(By.CSS_SELECTOR, ".el-input__inner")
     
     # XPath
     element = driver.find_element(By.XPATH, '//input[@class="el-input__inner"]')
     

带有提示语的

# 等待并定位手机号输入框
phone_number_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//input[@class="el-input__inner" and @placeholder="请输入手机号"]'))
)
phone_number_input.send_keys("1899999999")

# 等待并定位密码输入框
password_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//input[@class="el-input__inner" and @placeholder="请输入密码"]'))
)
password_input.send_keys("11111111")

# 定位登录按钮并点击
login_button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//button[contains(@class, "login-button") and span[text()="登录"]]'))
)
login_button.click()
# 定位登录按钮并点击
    login_button = driver.find_element(By.CSS_SELECTOR, 'button.login-button span')

上一行代码中的. 和空格分别是什么意思

在CSS选择器中,. 和 空格 都是重要的组合符号,它们有着特定的意义:
. (点号):在CSS选择器中,. 用于选取具有特定类名的元素。例如,.login-button 表示选取所有拥有类名为 login-button 的元素。因此,当你看到 .login-button,这意味着选择器正在查找任何类名为 login-button 的HTML元素。
空格:在CSS选择器中,空格用于表示层次关系,特别是后代选择器(descendant selector)。当两个选择器由空格分隔时,它表示选择第一个选择器的所有后代元素中,符合第二个选择器条件的元素。所以,button.login-button span 这个选择器的含义是:先找到所有类名为 login-button 的 button 元素,然后在这些元素的后代中寻找所有的 span 元素。
结合上述解释,button.login-button span 这个CSS选择器的含义是:选取所有类名为 login-button 的 button 元素内部的所有 span 元素。在你的代码中,这用于定位并选择登录按钮内部的 span 标签,通常这种结构出现在按钮内部含有文本或图标的情况,目的是更精确地定位到实际可点击的登录按钮区域。

利用这个定位:研究,注意是不是唯一,可通过检查进行。

# 这里我们假设"研究"按钮是一个span标签,且class属性为空
        login_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//span[text()='研究']"))
        )

当个别元素有特定值是,应该如何处理。比如切换手机号登录和密码登录。

# 等待元素出现
    login_tab = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//div[@id="tab-1" and contains(text(), "账号登录")]'))
    )

    # 检查元素是否已经具有is-active类
    if 'is-active' not in login_tab.get_attribute('class'):
        # 如果没有is-active类,添加这个类
        login_tab.click()

    # 现在元素应该具有is-active类了
    print("已将'is-active'类添加到'账号登录'元素")

对于文本区:<textarea class="el-textarea__inner" tabindex="0" autocomplete="off" placeholder="输入任何想了解的问题,剩下交给AI~" id="el-id-2143-13" style="min-height: 24px; height: 24px;"></textarea>,应该如何定位?

对于定位和操作文本区域(<textarea>)元素,你可以直接使用其特有的属性,如class、id或placeholder等,来构建CSS选择器或XPath表达式。鉴于您提供的<textarea>元素具有特定的id,使用ID定位是最直接且高效的方法。下面是针对您提供的<textarea>元素的定位和输入文本的示例代码:

请注意个别网站的ID是每次都变化的。所以他的建议要考虑一下。

加载中...
这个如何定位。

要定位这个包含图片和其他元素的

,你可以根据具体需求选择不同的定位策略。这里有几种可能的定位方法:

  1. 通过ID定位
    如果你想要直接定位到外层的
    ,可以使用其ID属性:
outer_div = driver.find_element(By.ID, "aliyunCaptcha-img-box")
  1. 通过类名定位
    如果你想定位到内部的某个元素,比如图片,可以使用类名:
image_element = driver.find_element(By.CSS_SELECTOR, "img.spacesemantic")
  1. 定位到特定的子元素
    如果你的目标是定位到某个具体的子元素,比如加载提示的
    ,可以这样写:
loading_div = driver.find_element(By.CSS_SELECTOR, "#aliyunCaptcha-img-box .aliyunCaptcha-loading")
  1. 组合定位
    如果需要更精确的定位,比如定位到错误提示的,可以结合ID和标签名:
error_tip_span = driver.find_element(By.CSS_SELECTOR, "#aliyunCaptcha-errorTip")
  1. XPath定位
    对于更复杂的选择,可以使用XPath,比如直接定位到图片元素:
image_element = driver.find_element(By.XPATH, "//div[@id='aliyunCaptcha-img-box']/img[@class='spacesemantic']")

先这些吧。

标签: selenium 笔记 vue.js

本文转载自: https://blog.csdn.net/weixin_42771529/article/details/138423354
版权归原作者 PyAIGCMaster 所有, 如有侵权,请联系我们删除。

“selenium中定位的问题笔记”的评论:

还没有评论