元素定位
Selenium提供了8种定位方式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() 匹配任何类型的节点
参考链接:https://www.runoob.com/xpath/xpath-tutorial.html
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 选取当前节点的所有命名空间节点
切换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()示例
执行结果:
获取元素属性值
user = driver.find_element_by_xpath("//input[@id='IdInput']").get_attribute("placeholder") pass = driver.find_element_by_xpath("//input[@id='PwdInput']").get_attribute("placeholder")
执行结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。