【selenium】元素定位
元素定位
1 id 2 name 3 classname 4 tag name 5 link text 6 partial link text 7 xpath 8 css selector
定位一个元素 定位多个元素 含义
find_element_by_id find_elements_by_id 通过元素id定位
find_element_by_name find_elements_by_name 通过元素name定位
find_element_by_class_name find_elements_by_class_name 通过classname进行定位
find_element_by_tag_name find_elements_by_tag_name 通过标签定位
find_element_by_link_text find_elements_by_link_tex 通过完整超链接定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通过部分链接定位
find_elements_by_css_selector find_elements_by_css_selector 通过css选择器进行定位
find_element_by_xpath find_elements_by_xpath 通过xpath表达式定位
根据id、name、classname元素定位 模拟输入
# 根据id查找元素,.send_keys 输入信息 selenium chrome_browser.find_element_by_id('kw').send_keys('selenium') # 根据name查找元素,找到并输入 webdriver chrome_browser.find_element_by_name('wd').send_keys('webdriver') # 根据class查找元素,并输入信息 hello world chrome_browser.find_element_by_class_name("s_ipt").send_keys('hello world')
tag_name 标签名定位
# 根据标签name查找元素 chrome_browser.find_elements_by_tag_name('input')
link_text 文本链接定位元素
# 根据link_text定位元素 准确定位 标签需要是<a></a>才能定位到 chrome_browser.find_element_by_link_text("新闻") # 根据link_text定位元素 模糊定位 标签需要是<a></a>才能定位到 chrome_browser.find_element_by_partial_link_text("涨价") # 元素定位 模拟用户点击 chrome_browser.find_element_by_link_text("贴吧").click()
根据id、class元素定位 模拟点击
# 根据id查找元素,模拟用户进行点击 chrome_browser.find_element_by_id('su').click() # 根据class name查找元素,模拟用户进行点击 chrome_browser.find_element_by_class_name('s_btn').click()

def baidu_selenium(self): """ 百度搜索selenium """ driver = webdriver.Chrome() # 打开Google浏览器 driver.implicitly_wait(5) # 未找到控件时 隐式等待5s driver.get("http://www.baidu.com") # 打开网址 print("页面标题:", driver.title) print("页面url:", driver.current_url) time.sleep(3) # 强制等待3s input_box = driver.find_element_by_class_name("s_ipt") # class 元素定位 input_box.send_keys("selenium") # 模拟用户输入 print("元素 标签名:", input_box.tag_name) print("元素 位置:", input_box.location) print("元素 大小:", input_box.size) print("selenium_id:", input_box.id) print("获取id属性:", input_box.get_attribute("id")) print("获取name属性:", input_box.get_attribute("name")) print("获取class属性:", input_box.get_attribute("class")) time.sleep(5) # 强制等待5s baidu_button = driver.find_element_by_id('su') # id 元素定位 baidu_button.click() # 模拟用户点击 print("获取id属性:", baidu_button.get_property("id")) print("获取class属性:", baidu_button.get_attribute("class")) time.sleep(5) driver.find_element_by_name("wd").clear() # name 元素定位 模拟用户清空输入框 time.sleep(5) driver.quit() # 关闭浏览器
Xpath
表达式 描述 nodename 选取此节点的所有子节点。 / 从根节点选取(取子节点)。 // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。 . 选取当前节点。 .. 选取当前节点的父节点。 @ 选取属性。
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点

1、child 选取当前节点的所有子元素 2、parent 选取当前节点的父节点 3、descendant 选取当前节点的所有后代元素(子、孙等) 4、ancestor 选取当前节点的所有先辈(父、祖父等) 5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身 6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身 7、preceding-sibling 选取当前节点之前的所有同级节点 8、following-sibling 选取当前节点之后的所有同级节点 9、preceding 选取文档中当前节点的开始标签之前的所有节点 10、following 选取文档中当前节点的结束标签之后的所有节点 11、self 选取当前节点 12、attribute 选取当前节点的所有属性 13、namespace 选取当前节点的所有命名空间节点
参考链接:https://www.runoob.com/xpath/xpath-tutorial.html
获取元素属性值
user = driver.find_element_by_xpath("//input[@id='IdInput']").get_attribute("placeholder")
pass = driver.find_element_by_xpath("//input[@id='PwdInput']").get_attribute("placeholder")
执行结果:
切换frame
# find_element_by_id()或find_element_by_class_name() driver.switch_to.frame("xxx") # 从子frame切换到父级frame (多重父级需要多个语句返回先辈节点) driver.switch_to.parent_frame() # 将焦点切换到默认frame (多重父级单条返回先辈节点) driver.switch_to.default_content()
切换选项卡
all_tab = driver.window_handles # 获取所有选项卡 ,all_tab 类型为 list print(all_tab) time.sleep(3) driver.switch_to.window(all_tab[1]) # 切换选项卡 print(driver.title)

def tieba(self): """ 贴吧 """ driver = webdriver.Chrome() driver.get("http://www.baidu.com") driver.find_element_by_link_text("贴吧").click() all_tab = driver.window_handles # 获取所有选项卡 print(all_tab) time.sleep(3) driver.switch_to.window(all_tab[1]) # 切换选项卡 print(driver.title) driver.find_element_by_link_text("百度首页").click() # 对贴吧进行操作 time.sleep(3) driver.switch_to.window(driver.window_handles[0]) # 再次切换选项卡 print(driver.title) time.sleep(5) driver.find_element_by_id("kw").send_keys("微博") # 对百度进行搜索 time.sleep(3) driver.find_element_by_id("su").click() time.sleep(5) driver.quit()
执行结果:
-------------------------------------------------------------------------------------
如果万事开头难 那请结局一定圆满 @ Phoenixy
-------------------------------------------------------------------------------------
分类:
Python
标签:
python 模块及工具
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)