文章目录

  • 一、声明浏览器对象
  • 二、基本方法
  • 三、查找节点
  • (一)单个节点
  • (二)多个节点(返回列表)
  • 四、节点交互
  • (一)input节点
  • (二)button节点
  • 五、节点信息
  • 六、切换Frame
  • 七、动作链
  • 八、执行JS
  • 九、Cookies
  • 十、延时等待
  • (一)隐式等待
  • (二)显式等待
  • 十一、异常
  • 十二、防止Selenium被屏蔽
  • 十三、不弹出浏览器窗口



from selenium import webdriver:导入库

一、声明浏览器对象

  • browser = webdriver.Chrome() :谷歌
  • browser = webdriver.Firefox() :火狐
  • browser = webdriver.Edge() :Edge
  • browser = webdriver.Safari() :苹果safari

二、基本方法

  1. browser.maximize_window():最大化窗口
  2. browser.get(url):浏览器请求url
  3. browser.close():关闭窗口
  4. browser.quit():关闭浏览器
  5. browser.page_source:获取请求url的HTML代码
  6. browser.page_source.find('keyword'):HTML代码中寻找keyword
  7. browser.current_url:获取当前url

三、查找节点

(一)单个节点

  1. browser.find_element_by_tag_name:通过标签名查找
  2. browser.find_element_by_id():通过id查找
  3. browser.find_element_by_class_name():通过属性查找
  4. browser.find_element_by_name():通过name查找
  5. browser.find_element_by_link_text():通过a链接里的文本查找
  6. browser.find_element_by_css_selector():通过css选择器#id .classname tag查找
  7. browser.find_element_by_xpath():通过xpath查找
#通用方法
 from selenium.webdirver.common.by import By
 browser.find_element(By.ID, 'q')

基本可以使用6或者7代替前5个

(二)多个节点(返回列表)

  1. browser.find_elements_by_tag_name
  2. browser.find_elements_by_id()
  3. browser.find_elements_by_class_name()
  4. browser.find_elements_by_name()
  5. browser.find_elements_by_link_text()
  6. browser.find_elements_by_css_selector()
  7. browser.find_elements_by_xpath()

同单个节点,仅仅在element后加上s

四、节点交互

(一)input节点

  1. input_node.send_keys("keyword"):input框中填写文本
  2. input_node.clear():清空input框

(二)button节点

  • button_node.click():点击button按钮

五、节点信息

  1. node.get_attribute('href/id/name'):获得节点属性
  2. node.text:节点内部文本信息
  3. node.id:节点id
  4. node.location:节点在页面中的相对位置
  5. node.tag_name:标签名称
  6. node.size:节点的大小(宽、高)

六、切换Frame

  1. browser.switch_to_frame('id name'):切换到子页面
  2. browser.switch_to_parent_frame():切换回父页面

七、动作链

from selenium import webdriver
from selenium.webdriver import ActionChains

browser = webdriver.Chrome()
browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_id('draggable')
target = browser.find_element_by_id('droppable')
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()
  1. from selenium.webdriver import ActionChains:导入类
  2. actions = ActionChains(browser):传入浏览器对象,创建actions对象
  3. actions.drag_and_drop(source, target):拉拽操作,传入源/目标节点
  4. actions.perform():执行动作

八、执行JS

  • browser.execute_script( 'window.scrollTo(0,document.body.scrollHeight)'):执行js代码,下拉进度条到底部

九、Cookies

  1. browser.get_cookies():获取当前网页cookies
  2. browser.delete_all_cookies():删除cookies
  3. browser.add_cookie():添加cookie

十、延时等待

在使用Selenium访问网页的过程中,有时候需要等待网页的加载,所以有时候就需要延时等待一定的时间,确保网页里所需要的内容都加载出来

(一)隐式等待

当使用隐式等待执行测试的时候,如果 Selenium 没有在 DOM 中找到节点,将继续等待,超出设定时间后,则抛出找不到节点的异常。

  • browser.implicitly_wait(10):等待10s

(二)显式等待

指定要查找的节点,再指定一个最长等待时间。如果在指定时间内加载出来了这个节点,就返回查找的节点;如果到了指定时间没有加载出该节点,则抛出超时异常。

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

wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located(By.ID, 'q')))

十一、异常

  1. NoSuchElementException:无节点异常
  2. TimeoutException:超时异常

十二、防止Selenium被屏蔽

from selenium import webdriver
from selenium.webdriver import ChromeOptions

option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
browser = webdriver.Chrome(options=option)
# 关闭自动化扩展信息
option.add_experimental_option('useAutomationExtension',False)

browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source':'Object.defineProperty(navigator,"webdriver",{get:()=>undefined})'})
browser.get('https://antispider1.scrape.cuiqingcai.com/')

十三、不弹出浏览器窗口

from selenium import webdriver
from selenium.webdriver import ChromeOptions

option = ChromeOptions()
option.add_argument('--headless')
browser = webdriver.Chrome(options=option)