无头浏览器

  • 定义:没有界面的浏览器
  • 特点:

1、没有界面也能操作

2、没有界面也能截图

3、省资源

4、不关心界面操作过程

headless(官方推荐)

1、ChromeOptions

from time import sleep
from selenium import webdriver

option = webdriver.ChromeOptions()#实例化一个浏览器对象
option.add_argument('--headless')#添加参数,option可以是headless,--headless,-headless
driver = webdriver.Chrome(options=option)#创建一个无头浏览器
driver.get('https://www.baidu.com/')
print('浏览器名字:'+driver.name)#查看下浏览器的名字
driver.find_element_by_css_selector('#kw').send_keys('自动化测试研习社公众号')
driver.save_screenshot('ChromeOptions.png')#截图保存
sleep(2)
driver.quit()#关闭进程
>>>
浏览器名字:chrome

截图成功

python自动下载驱动的无头浏览器 selenium 无头浏览器_python

2、FirefoxOptions

rom time import sleep
from selenium import webdriver

option = webdriver.FirefoxOptions()#实例化一个浏览器对象
option.add_argument('--headless')#添加参数
driver = webdriver.Firefox(options=option)#创建一个无头浏览器
driver.get('https://www.baidu.com/')
print('浏览器名字:'+driver.name)#查看下浏览器的名字保存
sleep(2)
driver.quit()#关闭进程
>>>

截图成功:

python自动下载驱动的无头浏览器 selenium 无头浏览器_python_02

注意:

ChromeOptions中option可以是headless,--headless,-headless

FirefoxOptions中option只能是-headless或--headless

PhantomJS(selenium4.0不支持,了解即可)

  • 配置过程:

1.下载phantomjs-2.1.1-windows.zip

下载地址:https://phantomjs.org/download.html

2.解压,得到一个目录

3.把bin目录放到path中

4.cmd输入phantomjs能得到一个提示phantomjs>

python自动下载驱动的无头浏览器 selenium 无头浏览器_python自动下载驱动的无头浏览器_03

5.首次配置重启pycharm

  • 用法:
from selenium import webdriver
from time import sleep

#driver = webdriver.Chrome()#打开一个有头浏览器
driver = webdriver.PhantomJS()#打开一个无头浏览器
driver.get('https://www.baidu.com/')#打开百度
#在搜索框输入‘自动化测试研习社’
driver.find_element_by_css_selector('#kw').send_keys('自动化测试研习社')
#截图保存
driver.save_screenshot('phantomjs.png')

操作正常运行并截图成功了

但是执行代码后发现控制台输出了一个UserWarning警告:

Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '

注意:UserWarning警告的意思是selenium在4.0版本已经弃用了phantomjs,所以只做了解即可。

其他option参数

启动浏览器时,除了加入无头参数‘headless’,还有很多其他参数

option全部参数:https://peter.sh/experiments/chromium-command-line-switches/

--user-agent='':设置请求头的User_Agent,可以模拟手机浏览网页

--windows_size=:设置浏览器分辨率

--start-maximized:最大化运行

--incognito:隐身模式(无痕浏览)

python自动下载驱动的无头浏览器 selenium 无头浏览器_html_04

--user-data-dir=:免登陆(爬虫会用到)

用法:首次手动登陆百度账号后,执行以下代码,会自动登陆

python自动下载驱动的无头浏览器 selenium 无头浏览器_python_05

select标签相关操作

select元素,也就是下拉选项卡

WebDriver中提供了一个叫Select的方法,将元素实例化为Select类对象

Select类提供了三种选择某一选项的方法:

python自动下载驱动的无头浏览器 selenium 无头浏览器_开发语言_06

by_index 索引 : 0 是第一个元素

by_value :value属性的值

by_visible_text : >文本<

接下来用一个简单的html文件来试下

<!test1.html>
<html>
<body>

<select>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>

</body>
</html>

python自动下载驱动的无头浏览器 selenium 无头浏览器_html_07

写代码对select标签进行操作

from time import sleep
from selenium import webdriver
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
#打开我们自己写的html
driver.get(r'D:\2-selenium\1212_webdriver高级操作(一)\test1.html')
#找到select标签
ele_select = driver.find_element_by_css_selector('body>select')
#选中value值为‘volvo’的元素
Select(ele_select).select_by_value('volvo')
sleep(2)
#选中select标签下下标为3的元素(从0开始,即第4个)
Select(ele_select).select_by_index(3)
sleep(2)
#选中select标签下文本为‘Opel’的元素
Select(ele_select).select_by_visible_text('Opel')

效果如下:

python自动下载驱动的无头浏览器 selenium 无头浏览器_python自动下载驱动的无头浏览器_08

Select没有全选方法,要自己实现

先修改下html文件,select标签改为

<select multiple="multiple">

以支持多选

from time import sleep
from selenium import webdriver
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
#打开我们自己写的html
driver.get(r'D:\2-selenium\1212_webdriver高级操作(一)\test1.html')
#找到select标签
ele_select = driver.find_element_by_css_selector('body>select')
ele_options = driver.find_elements_by_css_selector('body>select>option')
for option in ele_options:
    sleep(1)
    # option.click()
    Select(ele_select).select_by_visible_text(option.text)
#反选所有
sleep(1)
Select(ele_select).deselect_all()

效果如下:

python自动下载驱动的无头浏览器 selenium 无头浏览器_html_09

可以看到,通过简单的代码实现了多选及反选操作。