selenium设置浏览器为headless无头模式(Chrome和Firefox)


Posted in Python onJanuary 08, 2021

新版本的selenium已经明确警告将不支持PhantomJS,建议使用headless的Chrome或FireFox。

两者使用方式非常类似,基本步骤为:

  • 下载驱动
  • 创建选项,设定headless
  • 创建WebDriver,指定驱动位置和选项
  • 对URL发起请求,获得结果,进行解析

Chrome

驱动的下载路径为:https://chromedriver.storage.googleapis.com/index.html

接下来创建选项并设定headless:

options = webdriver.ChromeOptions()
options.set_headless()

创建WebDriver,指定驱动位置和选项:

driver = webdriver.Chrome(
  'D://chromedriver_win32//chromedriver', chrome_options=options)

发起请求,获得结果并进行解析:

driver.get('http://www.sohu.com/')
time.sleep(3)
print(driver.page_source)
driver.close()

Firefox

驱动的下载路径为:https://github.com/mozilla/geckodriver

启动的步骤与Chrome一致,只不过使用的选项对象和创建的WebDriver对象略有不同。直接上源代码:

options = webdriver.FirefoxOptions()
options.set_headless()
driver = webdriver.Firefox(
  firefox_options=options,
  executable_path='D:/geckodriver-win64/geckodriver')
driver.get('http://www.sohu.com/')
time.sleep(3)
print(driver.page_source)
driver.close()

 SELENIUM使用HEADLESS无头模式实现无界面运行

先导包:

from selenium.webdriver.chrome.options import Options

加入如下配置:

chrome_options = Options()

chrome_options.add_argument('--window-size=1920,1080')   # 设置窗口界面大小

chrome_options.add_argument('--headless')

driver = webdriver.Chrome(chrome_options=chrome_options)

参考代码:

from selenium import webdriver
import time
import multiprocessing
from selenium.webdriver.chrome.options import Options



class Zutuan():
  def __init__(self):
    """打开浏览器"""
    self.chrome_options = Options()
    self.chrome_options.add_argument('--window-size=1920,1080')
    self.chrome_options.add_argument('--headless')
    self.driver = webdriver.Chrome(chrome_options=self.chrome_options)

  def open_zutuan(self, url):
    """传入组团url"""
    self.driver.get(url)
    #self.driver.maximize_window()
    self.driver.refresh()
    #time.sleep(0.01)
    self.driver.implicitly_wait(30)    # todo implicitly隐式等待,等待元素可见

  def option_element(self, user, password):
    """xpath定位元素"""
    self.driver.find_element_by_xpath('//div[@class="login a"]/i').click()
    time.sleep(0.01)
    self.driver.find_element_by_xpath('//div[@class="a-title"]').click()
    self.driver.find_element_by_xpath('//input[@type="text" or @class="userName"]').send_keys(user)
    self.driver.find_element_by_xpath('//input[@type="password"]').send_keys(password)
    self.driver.find_element_by_xpath('//div[@class="button"]').click()
    time.sleep(1)
    self.driver.refresh()


  def select_commodity(self, content):
    """搜索组团商品"""
    # TODO self.content实例属性传给下面的方法使用,如果想把值给下面的方法用,添加实例属性解决
    self.content = content
    self.driver.find_element_by_xpath('//input[@type="text"]').send_keys(content)
    self.driver.find_element_by_xpath('//div[@class="search"]').click()
    self.driver.refresh()
    #return content

  def result(self):
    """判断搜索商品成功后的提示信息,断言页面是否成功"""
    if self.content in self.driver.page_source:
      #print(self.content)
      print('商品搜索成功,测试通过')
    else:
      print('商品搜索错误,测试失败')

  def closed(self):
    """关闭浏览器"""
    time.sleep(1)
    self.driver.quit()


def run1():
  # TODO 根据操作顺序,调用方法执行
  zt = Zutuan()
  zt.open_zutuan('http://www.zutuan.cn/index.html#/')
  zt.option_element('1489088761@qq.com', 'mg123456')
  zt.select_commodity('香蕉')
  zt.result()
  zt.closed()


class View_details(Zutuan):
  """把商品添加为明星单品,"""
  def check_commodity(self, number):
    """进入商品详情页,点击添加明星单品"""
    self.driver.find_element_by_xpath('//a[@target="_blank"]/img').click()
    self.driver.switch_to.window(self.driver.window_handles[1])
    self.driver.find_element_by_xpath('//div[@class="child start"]').click()
    self.driver.find_element_by_xpath('//div[@class="el-dialog__body"]//input[@type="text"]').send_keys(number)
    self.driver.find_element_by_xpath('//button[@type="button" and @class="el-button el-button--danger"]').click()
    time.sleep(1)

  def result(self):
    """重写父类方法,判断商品添加成功后的提示信息,断言页面是否成功"""
    if '添加成功' in self.driver.page_source:
      print('商品添加成功,测试通过')
    else:
      print('商品添加失败,测试失败')
    # 调用父类方法关闭
    super().closed()


def run2():
  vd = View_details()
  vd.open_zutuan('http://www.zutuan.cn/index.html#/')
  vd.option_element('1489088761@qq.com', 'mg123456')
  vd.select_commodity('苹果')
  vd.check_commodity(91628)
  vd.result()


def main():
  p1 = multiprocessing.Process(target=run1)
  p2 = multiprocessing.Process(target=run2)

  p1.start()
  p2.start()


if __name__ == '__main__':
  main()

到此这篇关于selenium设置浏览器为headless无头模式(Chrome和Firefox)的文章就介绍到这了,更多相关selenium 浏览器为headless无头模式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python八大排序算法速度实例对比
Dec 06 Python
简单了解Django模板的使用
Dec 20 Python
查看python下OpenCV版本的方法
Aug 03 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
浅谈Python中的bs4基础
Oct 21 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
Python画图高斯分布的示例
Jul 10 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
Python小白垃圾回收机制入门
Jun 09 Python
Python Flask异步发送邮件实现方法解析
Aug 01 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 Python
能让Python提速超40倍的神器Cython详解
Jun 24 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 #Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 #Python
Numpy中的数组搜索中np.where方法详细介绍
Jan 08 #Python
python 窃取摄像头照片的实现示例
Jan 08 #Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 #Python
Opencv+Python识别PCB板图片的步骤
Jan 07 #Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 #Python
You might like
PHP的中问验证码
2006/11/25 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
利用css+原生js制作简单的钟表
2020/04/07 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
python中format()函数的简单使用教程
2018/03/14 Python
Python3多线程操作简单示例
2018/05/22 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
Django继承自带user表并重写的例子
2019/11/18 Python
django框架forms组件用法实例详解
2019/12/10 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
Python验证码截取识别代码实例
2020/05/16 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
医科学校毕业生自荐信
2013/11/09 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
行政上诉状范文
2015/05/23 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android