python3---selenium3定位元素

本文基于百度首页,进行实验。

from selenium import webdriver


driver = webdriver.Chrome()  # 实例化谷歌浏览器
driver.get("https://www.baidu.com/")
# id 定位(对应html元素的id属性)
# driver.find_element_by_id("kw").send_keys("123")  # 百度首页输入框id定位,输入123

# class定位(对应html元素的class属性)
# driver.find_element_by_class_name("s_ipt").send_keys("123")  # 百度首页输入框class定位,输入123
# driver.find_element_by_class_name("bg s_btn").click()  # 百度首页搜索按钮。  # 注意不支持多个class属性。

# 超链接完整文本定位(仅限对html元素的a标签定位)
# driver.find_element_by_link_text("新闻").click()

# 超链接不完整文本定位(仅限对html元素的a标签定位)
# driver.find_element_by_partial_link_text("闻").click()

# name定位(对应html元素的name属性)
# driver.find_element_by_name("wd").send_keys("123")  # 百度首页输入框name定位,输入123

# tag定位(html元素标签定位) 一般不使用。
# driver.find_element_by_tag_name("button").click()

# css定位
# 1.针对id
# driver.find_element_by_css_selector("#kw").send_keys("123")  # 百度首页输入框id定位,输入123
# 2.针对class
# driver.find_element_by_css_selector(".s_ipt").send_keys("123")  # 单个class定位
# driver.find_element_by_css_selector(".s_ipt").send_keys("123")
# # driver.find_element_by_css_selector(".bg .s_btn").click()  # 多个class定位,每个class都用点表示
# 3.tagName与id或class组合
# driver.find_element_by_css_selector("input#kw").send_keys("123")  # tagName和id组合
# driver.find_element_by_css_selector("input.s_ipt").send_keys("123")  # tagName和class组合
# 4.与标签属性结合
# driver.find_element_by_css_selector("input[name='wd']").send_keys("123")  # 单属性
# driver.find_element_by_css_selector("input[name='wd'][class='s_ipt']").send_keys("123")  # 多属性

# xpath定位(建议使用相对定位)
# * 表示通配符,匹配任意元素标签
# @ 表示选择元素属性名
# driver.find_element_by_xpath("//*[@name='wd']").send_keys("123")  # 单个元素属性
# driver.find_element_by_xpath("//*[@name='wd' and @class='s_ipt']").send_keys("123")  # 多个元素属性 这里是and 也可以是其他,比如or等。
# 下面3种比较常用。
# driver.find_element_by_xpath("//a[text()='新闻']").click()  # 根据text()方法 ,它是根据元素内容全文本
# driver.find_element_by_xpath("//a[contains(text(),'闻')]").click()  # 结合text方法,根据元素内容部分文本
# driver.find_element_by_xpath("//a[contains(@target,'_blan')]").click()  # 结合是否包含元素属性值定位

# xpath的轴定位,也就是根据元素与元素之间的关系定位
# 轴定位的语法是      轴名称::节点名称[@属性=值]
# 节点名称就是元素标签名
# 轴名称有很多,比如ancestor、parent、preceding、preceding-sibling,following,following-sibling等
# driver.find_element_by_xpath("//a[text()='新闻']//ancestor::div")  # ancestor表示当前定位元素的所有祖先节点(包括父节点)
# 就好比定位你的所有爸爸、爷爷、祖爷,直到第一个。  这里定位表达式的div默认是第一个,如果想定位你的爸爸,直接写div[1]
# parent就是定位你的直接爸爸,就好比//a[text()='新闻']//ancestor::div[1]  ===   //a[text()='新闻']//parent::div
# preceding 就是定位当前元素之前的所有元素,preceding-sibling 就是定位当前元素之前的所有兄弟元素。
# following 就是定位当前元素之后的所有元素。




元素定位方式根据各种情况选择合适的定位方式,建议多练习。

Wujie-App是一个针对微信小程序开发的自动化测试框架,它结合了Python语言和Selenium库来操作微信小程序页面。当你需要在Shadow DOM(阴影根DOM)中定位元素时,由于Shadow DOM隐藏了部分真实DOM结构,常规的`find_element_by_*`方法可能无法直接找到目标元素。 在Wujie-App中定位Shadow DOM下的元素通常需要利用WebDriver的特殊功能,比如`execute_script`方法。这里是一个基本的例子: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化 WebDriver,这里假设你已经设置了微信小程序的模拟环境 driver = webdriver.Remote(command_executor='your_wujie_app_driver', desired_capabilities={...}) # 等待 ShadowRoot 出现 element_to_shadow_root = driver.find_element(By.CSS_SELECTOR, 'selector_of_the_host_element') # 根据实际页面选择对应的元素 shadow_root = WebDriverWait(driver, timeout=10).until(EC.presence_of_element_located((By.XPATH, '(.//*[contains(@class, "wx-shadroot")])[1]'))) # 使用 execute_script 进入 Shadow DOM 并定位目标元素 target_xpath_in_shadow = 'descendant-or-self::element[@data-role="your_target_role"]' # 替换为实际的XPath路径 element_in_shadow = driver.execute_script('return arguments[0].shadowRoot.querySelector(arguments[1])', shadow_root, target_xpath_in_shadow) # 现在你可以对 element_in_shadow 进行进一步的操作,如点击、填写等 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值