selenium元素操作、元素定位方式和元素八大定位法则、定位一组元素
1、元素定位方式及元素操作(元素定位方式看习惯使用,推荐第一种)
1.1、元素定位方式一(此方式不需要导入By类,相对简单易用)
直接调用:driver.find_element_by_XX(value),如下实例
# 导入模块 from selenium import webdriver # 创建一个浏览器对象 driver = webdriver.Firefox() # 访问网址 url = 'http://www.baidu.com' driver.get(url) # 使用第一种方式定位输入框 driver.find_element_by_css_selector('#kw') # 关闭浏览器 driver.quit()
1.2、元素定位方式二(此方式需要先导入By类:from selenium.webdriver.common.by import By)
使用By类型(需要导入By类):driver.find_element(By.XX,value),如下代码
# 导入包 from selenium import webdriver from selenium.webdriver.common.by import By # 创建一个浏览器对象 driver = webdriver.Firefox() # 访问地址 url = 'http://www.baidu.com' driver.get(url) # 使用第二种方式定位搜索框 driver.find_element(By.CSS_SELECTOR,'#kw') # 关闭浏览器 driver.quit()
1.3、元素操作(点击、输入、清空输入、提交)
点击:element.click()
输入:element.send_keys(value)
清空输入框:element.clear()
提交:element.submit()
# 导入包 from selenium import webdriver import time # 创建一个浏览器对象,访问百度 driver = webdriver.Firefox() driver.get('http://www.baidu.com') # 定位输入框后输入搜索内容,点击搜索 # 使用css定位 shu = driver.find_element_by_css_selector('#kw') # 输入搜索内容 shu.send_keys('特战队') time.sleep(1)# 意思是休眠一秒 # 清空输入框 shu.clear() time.sleep(1) # 重新输入 shu.send_keys('渣渣辉') time.sleep(1) # 定位搜索按钮 ss = driver.find_element_by_css_selector('#su') # 点击搜索 ss.click()# 这里也可以使用submit()提交来点击操作 time.sleep(1) # 关闭浏览器 driver.quit()
1.4、元素信息的获取
获取元素的文本内容:element.text
获取元素某个属性的值:element.get_attribute(value)
获取元素的尺寸:element.size
获取元素的是否可见:element.is_displayed()
# 导入包 from selenium import webdriver import time # 创建一个浏览器对象,访问百度 driver = webdriver.Firefox() driver.get('http://www.baidu.com') # 定位到元素 hao = driver.find_element_by_css_selector('a.mnav:nth-child(2)') # 获取文本内容和此元素某个属性的值(\n为换行) print('文本内容为:',hao.text,'\nhref属性值',hao.get_attribute('href')) # 获取元素的尺寸和元素是否可见 print('元素尺寸:',hao.size,'\n元素是否可见:',hao.is_displayed()) # 关闭浏览器 driver.quit()
2、元素八大定位法则
2.1、ID(定位)
2.2、name(属性值定位)
2.3、class name(伪类名定位)
2.4、tag name(标签名定位)
2.5、link text(链接文本定位)
2.6、partail link text(部分链接文本定位)
2.7、xpath(路径表达式定位)
2.8、css selector(css选择器定位)
# 导入包 from selenium import webdriver import time # 创建一个浏览器对象,访问百度 driver = webdriver.Firefox() driver.get('http://www.baidu.com') # ID定位(当某个元素有id值的时候,可以用此方法定位) driver.find_element_by_id('kw') # name定位(当某个元素拥有name值,且值为唯一,可以用此方式定位) driver.find_element_by_name('wd') # tag name定位(若某个元素标签名唯一,可以使用此方式) driver.find_element_by_tag_name('input') # class name定位(当某个元素有class name且唯一,可用此方式) driver.find_element_by_class_name('s_ipt') # 链接文本定位(欲定位某个链接元素,可以清楚看见其文本内容,可使用此方式) driver.find_element_by_link_text('百度一下') # 部分链接文本定位(某个链接元素文本只能看清部分内容,且此部分文本内容唯一,可用此方式) driver.find_element_by_partial_link_text('度一下') # xpath定位(可以任意定位任何元素,此方式表达式不能有错) driver.find_element_by_xpath(".//*[@id='kw']") # css定位(此方式定位可以直接使用浏览器自带查看元素复制唯一 选择器【Chrome为copy selector】) driver.find_element_by_css_selector('#su') # 关闭浏览器 driver.quit()
此八种方式无优劣之分,只有看定位的元素是否方便,或看个人使用习惯使用
八种方式中xpath和css都较常用,懂其一即可,看习惯使用,前面六种在某些情况下不一定可以成功定位,所有需要多懂几种以免有自己掌握的方式定位不了的情况
3、定位一组元素
格式:driver.find_elements_by_XX(vuale)
定位一组元素的此处也有八种方式,同上,此处以css方式为例
# 导入包 from selenium import webdriver import time # 创建一个浏览器对象,访问百度 driver = webdriver.Firefox() driver.get('http://www.baidu.com') # 定位到输入框输入内容 shuru = driver.find_element_by_css_selector('#kw') shuru.send_keys('特战旅') # 定位到搜索框,点击搜索 sou = driver.find_element_by_css_selector('#su') sou.click() # 获取搜索结果(定位一组元素),这里返回的是一个列表,若需要看列表里的东西需要遍历列表 zu = driver.find_elements_by_css_selector('.t>a') # 打印出来的是列表,列表里有10个不同的数字及字母元素 print(zu) # 遍历列表,获取结果的标题及链接 for i in zu: print('标题:',i.text,'/链接地址:',i.get_attribute('href')) # 关闭浏览器 driver.quit()