python基础 — Selenium 详细介绍


一、Selenium+Python环境搭建及配置

1.1 selenium 介绍

selenium 是一个 web 的自动化测试工具,不少学习功能自动化的同学开始首选 selenium ,因为它相比 QTP 有诸多有点:

  • 免费,也不用再为破解 QTP 而大伤脑筋
  • 小巧,对于不同的语言它只是一个包而已,而 QTP 需要下载安装1个多 G 的程序。
  • 这也是最重要的一点,不管你以前更熟悉 C、 java、ruby、python、或都是 C# ,你都可以通过 selenium 完成自动化测试,而 QTP 只支持 VBS
  • 支持多平台:windows、linux、MAC ,支持多浏览器:ie、ff、safari、opera、chrome
  • 支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器的执行,相当于分发机的功能。

官方文档:

  • https://selenium-python.readthedocs.io/index.html
  • https://seleniumhq.github.io/selenium/docs/api/py/api.html

1.2 selenium+Python环境配置

前提条件:已安装好Python开发环境(推荐安装Python3.5及以上版本)

安装步骤:

  1. 安装selenium
    Win:pip install selenium
    Mac:pip3 install selenium

  2. 安装webdriver
    各大浏览器webdriver地址可参见:https://docs.seleniumhq.org/download/
    Firefox:https://github.com/mozilla/geckodriver/releases/
    Chrome:https://sites.google.com/a/chromium.org/chromedriver/ 或者
    http://chromedriver.storage.googleapis.com/index.html
    IE:http://selenium-release.storage.googleapis.com/index.html
    注:webdriver需要和对应的浏览器版本以及selenium版本对应

Webdriver版本支持的Chrome版本
v2.41 v67-69
v2.40 v66-68
v2.39 v66-68
v2.38 v65-67
v2.37 v64-66
v2.36 v63-65
v2.35 v62-64
v2.34 v61-63
v2.33 v60-62
  1. webdriver安装路径
    Win:复制webdriver到Python安装目录下
    Mac:复制webdriver到/usr/local/bin目录下

二、元素定位及浏览器基本操作

2.1 启动浏览器

2.1.1 普通方式启动

启动Chrome浏览器:

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')

启动Firefox浏览器:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.baidu.com/')

启动IE浏览器:

from selenium import webdriver

browser = webdriver.Ie()
browser.get('http://www.baidu.com/')

2.1.2 Headless方式启动

Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器环境。

Headless Chrome 对Chrome版本要求:
官方文档中介绍,mac和linux环境要求chrome版本是59+,而windows版本的chrome要求是60+,同时chromedriver要求2.30+版本。

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
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

chrome_options = webdriver.ChromeOptions()
# 使用headless无界面浏览器模式
chrome_options.add_argument('--headless') //增加无界面选项
chrome_options.add_argument('--disable-gpu') //如果不加这个选项,有时定位会出现问题

# 启动浏览器,获取网页源代码
browser = webdriver.Chrome(chrome_options=chrome_options)
mainUrl = "https://www.taobao.com/"
browser.get(mainUrl)
print(f"browser text = {browser.page_source}")
browser.quit()

2.1.3 加载配置启动浏览器

Selenium操作浏览器是不加载任何配置的,下面是关于加载Chrome配置的方法:

用Chrome地址栏输入https://carbon.now.sh

另外如果使用Vscode的话,可以安装对应的插件进行快速在线美化。

  • 打开Vscode,在插件栏输入:carbon-now-sh
  • 点击安装
  • 点击重新加载即可安装
  • 按快捷键ALT+CMD+A(win系统下使用:ALT+WIN+A)即可

效果预览:

    四、Selenium 浏览器无界面操作  
# coding=utf-8
from selenium import webdriver
import time

'''
使用selenium时,只需要在chrome里面添加参数chrome_options 运行时就会是无界面的状态
'''


def chrome():
    chrome_options = webdriver.ChromeOptions()
    # 浏览器不提供可视化页面  add_argument('--headless')
    chrome_options.add_argument('--headless')
    # 禁用GPU加速   add_argument('--disable-gpu')
    chrome_options.add_argument('--disable-gpu')

    # 启动浏览器
    browser = webdriver.Chrome(chrome_options=chrome_options)
    Url = "https://www.taobao.com/"
    browser.get(Url)

    browser.set_window_size(1280, 800)  # 分辨率 1280*800
    print(browser.get_window_size())

    browser.implicitly_wait(5)
    time.sleep(2)
    # 停2秒后,抓取快照
    browser.save_screenshot('taobao.jpeg')
    print("[info] screenshot done!!")

    # 获取网页源代码
    browser.get(Url)
    print(f"browser text = {browser.page_source}")
    browser.quit()


if __name__ == '__main__':
    chrome()
补充:


chrome_options.add_argument('--user-agent=""')   # 设置请求头的User-Agent
chrome_options.add_argument('--window-size=1280x1024')   # 设置浏览器分辨率(窗口大小)
chrome_options.add_argument('--start-maximized')   # 最大化运行(全屏窗口),不设置,取元素会报错
chrome_options.add_argument('--disable-infobars')    # 禁用浏览器正在被自动化程序控制的提示
chrome_options.add_argument('--incognito')   # 隐身模式(无痕模式)
chrome_options.add_argument('--hide-scrollbars')   # 隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('--disable-javascript')    # 禁用javascript
chrome_options.add_argument('--blink-settings=imagesEnabled=false')    # 不加载图片, 提升速度
chrome_options.add_argument('--headless')     # 浏览器不提供可视化页面

chrome_options.add_argument('--ignore-certificate-errors')    # 禁用扩展插件并实现窗口最大化
chrome_options.add_argument('--disable-gpu')    # 禁用GPU加速
chrome_options.add_argument('–disable-software-rasterizer')
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--start-maximized')    # 窗口最大化

但窗口最大化不能直接用 add_argument('--start-maximized') ,就上面代码案例,我是用了另外一个方法

browser.set_window_size(1280, 800)  # 分辨率 1280*800 来固定好浏览器窗口大小