无头浏览器
- 定义:没有界面的浏览器
- 特点:
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
截图成功
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()#关闭进程
>>>
截图成功:
注意:
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>
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:隐身模式(无痕浏览)
--user-data-dir=:免登陆(爬虫会用到)
用法:首次手动登陆百度账号后,执行以下代码,会自动登陆
select标签相关操作
select元素,也就是下拉选项卡
WebDriver中提供了一个叫Select的方法,将元素实例化为Select类对象
Select类提供了三种选择某一选项的方法:
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>
写代码对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')
效果如下:
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()
效果如下:
可以看到,通过简单的代码实现了多选及反选操作。