selenium API--元素定位

元素定位方法分类

直接调用型(推荐方式)

driver.find.element_by_xxx(value)

使用BY类型(导入BY)

from selenium.webdriver.common.by import import By
driver.find_element(By.xxx,value)

元素定位方法的分类(按定位方式)

id // id定位
name //name属性值定位
class name //伪类名定位
tag name //标签名定位
link text //链接文本定位
partial link text //部分链接文本
xpath //xpath路径表达式
css selector //css选择器定位

八种定位方式的示例

driver.find_element_by_xpath(value)
driver.find_element_by_id(value)
driver.find_element_by_css_selector(value)
driver.find_element_by_name(value)
driver.find_element_by_class_name(value)
driver.find_element_by_link_text(value)
driver.find_element_by_partial_link_text(value)
driver.find_element_by_tag_name(value)

元素的操作

test = driver.find_element_by_xpath(value)
点击和输入
test.click() //点击
test.clear() //清空输入框
test.send_keys(data) //输入数据
获取所有窗口的句柄(用于识别多标签或窗口的情况)
handles = driver.window.handlers()
//会得到一个列表,在Selenium运行过程中的每一个窗口都有一个对应的值存放在里面
driver.switch_to_window(handlers[n])
//通过句柄进入该窗口
多表单切换
实际上就是用iframe/frame,引用了其他页面的链接
直接使用id值切换进表单
driver.switch_to.frame(value)
定位到元素,在切换进去
e = driver.find.element_by_id(xxx)
driver.switch_to.frame(e)
鼠标和键盘的操作

  • 导入动作链类,动作链可以储存鼠标的动作,并一起执行
    from selenium.webdriver import ActionChains
    ActionChains(driver)

      * 鼠标右击
      	el = driver.find_element_by_xxx(value)
      	context_click(el)
      	对el执行右击
      * 执行ActionChains中储存的所有动作
      	perform()
      ActionChains(driver).context_click(ele).perform()	     点击鼠标右键      
      ActionChains(driver). double_click(ele).perform()	     点击鼠标左键
      ActionChains(driver).move_to_element(el).perform()     鼠标悬停
    

键盘操作使用的是Keys类,一般配合send_keys使用

	* 导入
	from selenium.webdriver.common.keys import Keys

	* 常用键盘操作
		send_keys(Keys.BACK_SPACE) 	删除键(BackSpace)
		
		send_keys(Keys.SPACE) 		空格键(Space)
		
		send_keys(Keys.TAB) 		制表键(Tab)
		
		send_keys(Keys.ESCAPE) 		回退键(Esc)
		
		send_keys(Keys.ENTER) 		回车键(Enter)
		
		send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
		send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
		
		send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
		
		send_keys(Keys.F1) 			键盘 F1
		……
		send_keys(Keys.F12) 		键盘 F12

浏览器等待:
为什么要等待:网站内容过多,如果不进行等待而直接定位元素,可能会抛出异常
selenium中等待的分类:显示等待,隐式等待
显示等待:根据条件等待,等待条件出现
代码:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
#WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,
#默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置
#时间检测不到则抛出异常
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,"g-hu")))

隐式等待:根据事件进行等待,等待特定时间
driver.implicitly_wait(n)
优先 隐式等待 次之 显式等待 最次 固定等待

代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Firefox()
# print(dir(driver))
url = "https://bj.58.com"
driver.get(url)
# driver.get_screenshot_as_file("baidu.png")  截图
print(driver.title)

driver.maximize_window()
# 元素定位  根据id
ss = driver.find_element_by_id("kw")
# 元素定位 BY类型
ss = driver.find_element("name","wd")
# 元素定位 xpath
ss = driver.find_element_by_xpath(".//*[@name='wd']")
# 元素定位CSS类型
ss = driver.find_element_by_css_selector(".s_ipt")
# 链接文本定位
ss = driver.find_element_by_link_text("hao123")
ss.click()
# 多窗口跳转
# driver.refresh()
dj = driver.find_element_by_xpath("html/body/div[3]/div[1]/div[1]/div/div[2]/div[1]/span[2]/em[5]/a")
dj.click()

handles = driver.window_handles
print(handles)
driver.switch_to.window(handles[1])

cp = driver.find_element_by_xpath(".//*[@id='selection']/dl[7]/dd/a[5]")
cp.click()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值