Selenium核心技巧:元素定位与等待策略

Selenium核心技巧

  1. WebDriver:浏览器(交互)  
  2. find_element:元素定位
  3. WebElement元素(交互)     

重点内容:

  1. 元素定位
  2. 等待
  3. 元素交互
    1. 文件上传(3种)
    2. 滚动条处理
    3. JS代码(强制操作)

1、元素定位

  • 方法
    • find_element:如果成功返回元素,如果失败抛出异常。
    • find_elements:如果成功返回list,如果失败返回list(空)
  • 策略
    • 基于元素的属性进行定位
      ID = "id"
      NAME = "name" 
      TAG_NAME = "tag name" 
      CLASS_NAME = "class name"
      
      基于链接文件进行定位
      LINK_TEXT = "link text"
      PARTIAL_LINK_TEXT = "partial link text"
      
      可以定位任意元素
      XPATH = "xpath"
      CSS_SELECTOR = "css selector"

2、等待

  • 隐式等待
    • driver = webdriver.Edge(options=options, service=service)
      driver.implicitly_wait(20)     #隐式等待(放在浏览器启动之后,等待浏览器加载完成)
  • 显示等待
    • #显示等待(一般放在需要等待的上一个执行代码段)
      # WebDriverWait(driver,timeout=10).until(lambda x: driver.find_element(By.XPATH, value='//*[@id="s-top-left"]/a[1]'))
      
      wait=WebDriverWait(driver, 10)
      wait.until(lambda d: 1==1)   #等待条件
      
      #el=driver.find_element(by='xpath', value='//*[@id="s-top-left"]/a[1]')
      el=driver.find_element(By.XPATH, value='//*[@id="s-top-left"]/a[1]')
  • 流畅等待(更高级的等待)
  • 强制等待(休眠)
    • #强制等待
      import time
      time.sleep(3)

3、实例代码

wait_info = (By.XPATH, '//*[@id="app"]/div[1]/div[2]/div[2]/div[1]/div[2]/div/div[1]/div/div[1]/i')

#--------------------------------------------------

# 因为页面加载时间长,需要延时等待
# # 下列代码:正常
# WebDriverWait(drivers, timeout=10).until(
#     lambda x: drivers.find_element( By.XPATH, value='//*[@id="app"]/div[1]/div[2]/div[2]/div[1]/div[2]/div/div[1]/div/div[1]/i'))

# # 下列代码:正常
# name, value = login.wait_info
# WebDriverWait(drivers, timeout=10).until(
#     lambda x: drivers.find_element( By.XPATH, value=value))

# 下列代码:错误。login.wait_info 应该传地址
# WebDriverWait(drivers, timeout=10).until(lambda x: drivers.find_element(login.wait_info))

# 因为页面加载时间长,需要延时等待
# 下列代码:正常
WebDriverWait(drivers, timeout=10).until(lambda x: drivers.find_element(*login.wait_info))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BatyTao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值