Selenium核心技巧
- WebDriver:浏览器(交互)
- find_element:元素定位
- WebElement元素(交互)
重点内容:
- 元素定位
- 等待
- 元素交互
- 文件上传(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))

169

被折叠的 条评论
为什么被折叠?



