https://www.selenium.dev/documentation/webdriver/browser_manipulation/

强制等待

  1. import time
  2. # 强制等待10s
  3. time.sleep(10);

隐式等待

  1. from selenium import webdriver
  2. # ...省略一些非关键代码
  3. driver = webdriver.Chrome(chrome_options=options)
  4. # 隐式等待 10s
  5. # 判断某元素,如果10s内未发现,则抛出异常,
  6. # 如果在5s内加载页面完成,则立即对该元素进行操作。
  7. driver.implicitly_wait(10);

显式等待

显示等待的执行原理是,程序每隔多长时间检查一次,如果条件成立,则进行下一步,否则继续等待,直到设置的最大时间,抛出TimeoutException

  1. # 显示等待的执行原理是,程序每隔多长时间检查一次,如果条件成立,则进行下一步,否则继续等待,直到设置的最大时间,抛出TimeoutException
  2. from selenium import webdriver
  3. from selenium.webdriver.common.by import By
  4. from selenium.webdriver.support.ui import WebDriverWait
  5. from selenium.webdriver.support import expected_conditions as EC
  6. driver = webdriver.Chrome();
  7. driver.get("https://www.baidu.com");
  8. # WebDriverWait需要与until或until_not方法结合使用
  9. # WebDriverWait(driver, timeout, poll_frequency, ignored_exceptions)
  10. # timeout:超时时间
  11. # poll_frequency调用until或until_not方法的间隔时间
  12. # ignored_exceptions 忽略
  13. element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "sb_form_q")))
  14. element.send_keys("bella")

鼠标操作

  1. click(on_element=None) # 单击鼠标左键
  2. context_click(on_element=None) # 单击鼠标右键
  3. double_click(on_element=None) # 双击鼠标左键
  4. drag_and_drop(source, target) # 拖拽某个元素然后松开
  5. perform() # 执行所有ActiveChains中存储的行为
  6. release(on_element=None) # 在某个元素位置松开鼠标左键
  7. send_keys(*keys_to_send); # 发送某个键到当前焦点的元素
  8. move_to_element(on_element=None) # 鼠标悬停
  9. from selenium import webdriver
  10. from selenium.webdriver.common.action_chains import ActionChains
  11. driver = webdriver.Chrome()
  12. driver.get("https://www.baidu.com")
  13. sleep(1)
  14. right = driver.find_element_by_xpath("//input[@id='sb_form_q']")
  15. ActionChains(driver).context_click(right).perform()
  16. target = driver.find_element_by_xpath("//input[@id='sb_form_q_2']")
  17. ActionChains(driver).drag_and_drop(element, target).perform()

键盘的操作

  1. from selenium.webdriver.common.keys import Keys
  2. send_keys(Keys.BACK_SPACE) # 删除键
  3. send_keys(Keys.SPACE) # 空格键
  4. send_keys(Keys.TAB) # Tab
  5. send_keys(Keys.ESCAPE) # ESC
  6. send_keys(Keys.ENTER) # 回车键

基本api使用

  1. #!/usr/bin/env python3
  2. #-*- coding: utf-8 -*-
  3. from selenium import webdriver
  4. from selenium.webdriver.common.by import By
  5. import time
  6. # 设置移动端之心
  7. mobileEmulation = {'deviceName': 'iPhone 6/7/8'}
  8. options = webdriver.ChromeOptions()
  9. options.add_experimental_option('mobileEmulation', mobileEmulation)
  10. # 设置后台执行
  11. # 浏览器后台执行
  12. options.add_argument('--headless')
  13. options.add_argument('--disable-gpu')
  14. driver = webdriver.Chrome(chrome_options=options)
  15. # browser = webdriver.Chrome()
  16. driver.get('http://www.baidu.com')
  17. html = driver.page_source
  18. driver.implicitly_wait(10)
  19. print(html)
  20. print(driver.title)
  21. driver.quit()
  22. exit()
  1. # 打开一个站点
  2. driver.get("https://selenium.dev")
  3. # 获取地址栏中的url
  4. driver.current_url
  5. # 按浏览器的回退按钮
  6. driver.back()
  7. # 按浏览器的前进按钮
  8. driver.forward()
  9. # 刷新当前页面
  10. driver.refresh()
  11. # 获取页面当前标题
  12. driver.title
  13. # 等待10s,这个和time.sleep(10)有区别,time.sleep(10)会强制等待10s,
  14. # implicitly_wait(10) 只要找到了元素就开始执行
  15. driver.implicitly_wait(10)
  16. # 获取页面源代码
  17. driver.page_source
  18. # 浏览器选项卡,获取窗口句柄
  19. driver.current_window_handle
  20. # 浏览器选项卡,获取当前窗口句柄数组
  21. driver.window_handles
  22. # 创建一个新的浏览器选项卡,并切换过去
  23. driver.switch_to.new_window('tab')
  24. # 切换到新的窗口选项卡,传入窗口句柄
  25. driver.switch_to.window(window_handle)
  26. # 关闭当前选项卡
  27. driver.close()
  28. # 查询元素并且点击 click
  29. # from selenium.webdriver.common.by import By
  30. # By.LINK_TEXT, By.CLASS_NAME, By.ID, By.NAME
  31. driver.find_element(By.LINK_TEXT, "new window").click()
  32. driver.find_element(By.ID, "nav").click()
  33. # 屏幕截图,在后台执行也可以截图
  34. driver.get_screenshot_as_file('./h5.png')
  35. # 获取浏览器宽高
  36. size = driver.get_window_size()
  37. width = size.get("width")
  38. height = size.get("height")

注意iframe的情况

  1. <div id="modal">
  2. <iframe id="buttonframe" name="myframe" src="https://seleniumhq.github.io">
  3. <button>Click here</button>
  4. </iframe>
  5. </div>
  6. # 获取iframe元素
  7. iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
  8. # 切换到iframe
  9. driver.switch_to.frame(iframe)
  10. # Now click on button
  11. driver.find_element(By.TAG_NAME, 'button').click()
  12. # 如果您的框架或 iframe 具有 id 或 name 属性,
  13. # 则可以使用此属性。如果页面上的名称或 ID 不是唯一的,则将切换到第一个找到的。
  14. # 通过ID或者name
  15. driver.switch_to.frame('buttonframe')
  16. # Now, Click on the button
  17. driver.find_element(By.TAG_NAME, 'button').click()
  18. # 通过tagName获取
  19. iframe = driver.find_elements_by_tag_name('iframe')[1]
  20. # 切换到iframe
  21. driver.switch_to.frame(iframe)
  22. # 要离开 iframe 或框架集,请切换回默认内容。
  23. driver.switch_to.default_content()