Chrome无头模式 python+selenium+Chrome无头,ChromeHeadless

 

Python+selenium+Chrome headless

前言:
使用selenium执行网络爬虫程序时,考虑执行效率和某些其他原因,不希望爬虫工作时显式显示页面。

通过网上查询资料,该需求可以使用PhantomJS浏览器实现,也可以使用Chrome 浏览器的headless Browser模式实现。由于现在好像selenium不在支持PhantomJS了,所以主要采用Chrome Headless模式实现。

  1. 什么是Headless模式

    Headless Browser模式是浏览器的无界面状态,即在不打开浏览器界面的情况下使用浏览器。 该模式的好处如下:

    1)可以加快web自动化测试的执行时间,对于web自动化测试,少了真实浏览器加载css,js以及渲染页面的工作。无界面测试要比真实浏览器快的多。

    2)可以在无界面的服务器或CI上运行测试,减少了外界的干扰,使自动化测试更稳定。

    3)可以更便捷的运行web自动化,编写爬虫、截图等。通常是由编程或者命令行来控制的。

  2. 基础环境

    python:3.x

    python的selenium库: 3.141.0

    chrome浏览器: 91.0.4472.114

    chromedriver下载地址:

    镜像下载地址
    官方下载地址

    注意:一定要确保chrome浏览器和chromedriver版本对应

  3. selenium使用Chrome headless模式
    如何通过selenium调用Chrome headless模式呢? 下面是python的代码

    from selenium import webdriver
    #创建Chrome浏览器设置变量
    chrome_options = webdriver.ChromeOptions()
    #无界面模式
    chrome_options.add_argument('--headless')
    #实例化Chrome driver
    driver=webdriver.Chrome(chrome_options=chrome_options)
    #打开百度
    driver.get("https://www.baidu.com/")
    
    
  4. 设置浏览器窗口大小

    chrome_options.add_argument('--window-size=1920,1080')
    
  5. 打开新的标签页
    js代码可window.open(url)可在新窗口打开一个网页, dirver可执行js代码,具体代码如下:

    js="window.open('http://www.baidu.com/')"
    driver.execute_script(js)
    
  6. 切换窗口
    比如我们打开的第一个页面是[百度地图], 第2个窗口打开的页面是百度.如果我们想在第2个页面的输入框输入selenium,代码如下

    from selenium import webdriver
    #创建Chrome浏览器设置变量
    chrome_options = webdriver.ChromeOptions()
    #无界面模式
    chrome_options.add_argument('--headless')
    #设置窗口大小
    chrome_options.add_argument('--window-size=1920,1080')
    #实例化Chrome driver
    driver=webdriver.Chrome(chrome_options=chrome_options)
    #打开百度地图页面
    driver.get("https://map.baidu.com/")
    
    js="window.open('http://www.baidu.com')"
    driver.execute_script(js)
    driver.find_element_by_id("kw").send_keys("selenium")
    driver.save_screenshot("baidu-map5.png")
    driver.quit()
    

    但是很奇怪, 代码报错了,no such element: Unable to locate element: {“method”:“id”,“selector”:“kw”} 找不到这个元素.但是我们看百度的页面命名可以找到这个元素啊. 我们在这步操作之前截一张图就可以看出来,页面扔在第一个页面,即百度地图的页面, 这时候我们需要切换一些窗口.

    注意: 以前的方法,diver.switch_to_window() 已经被driver.switch_to.window替代

    search_windows=driver.current_window_handle
    all_handles=driver.window_handles
    for handle in all_handles:
        if handle !=search_windows:
            driver.switch_to.window(handle)
    
  7. 关闭窗口和关闭浏览器

    #关闭浏览器
    driver.quit()
    #关闭标签页
    driver.close() 
    

    这2个的使用场景是不同的:

    1. 在我们的case执行完对浏览器的操作后,一定要加上driver.quit() ,不然会导致内存爆满;

    2. 如果我们只想关闭一个窗口, 则用driver.close()

  8. 添加代理

    chrome_options.add_argument("--proxy-server=http://" + ip:port)
    
  9. 修改User-Agent

    # 修改User-Agent
    chrome_options.add_argument('user-agent= '你想修改成的User-Agent')
    
  10. 禁用图片

    chrome_options.add_argument('blink-settings=imagesEnabled=false')
    

参考地址: 参考地址链接

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Chrome Options是SeleniumChrome浏览器的一种参数配置选项。它允许我们在启动Chrome浏览器时设置各种选项,以实现不同的需求。 使用Chrome Options,我们可以完成以下任务: 1. 设置浏览器的浏览模式:我们可以通过设置"--headless"参数来启动Chrome无头模式,即在没有显示浏览器界面的情况下运行浏览器,这对于执行自动化测试很有用。 2. 设置浏览器的User-Agent:通过设置"--user-agent"参数,我们可以改变浏览器的User-Agent,以模拟不同的浏览器和设备。 3. 设置浏览器的下载路径:我们可以使用"--download.default_directory"参数来设置下载文件的默认保存路径。 4. 设置浏览器的语言:通过设置"--lang"参数,我们可以改变浏览器的语言环境,使其适应不同语言的网站。 5. 启用或禁用浏览器的扩展:通过设置"--disable-extensions"参数,我们可以禁用浏览器的扩展,或者通过"--load-extension"参数加载指定的扩展。 为了使用Chrome Options,我们首先需要导入selenium包中的Options类: ```python from selenium.webdriver.chrome.options import Options ``` 然后,我们可以创建Options对象,并设置所需的参数: ```python options = Options() options.add_argument("--headless") options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3") options.add_argument("--download.default_directory=C:/Downloads") ``` 最后,将Options对象作为参数传递给ChromeDriver的构造函数,即可在启动Chrome浏览器时应用这些参数配置: ```python driver = webdriver.Chrome(chrome_options=options) ``` 通过这种方式,我们可以充分利用Chrome Options的各种参数,对Chrome浏览器进行个性化设置,以满足我们不同场景下的需求。 ### 回答2: Python Selenium库提供了一些Chrome Options参数,可以在使用Chrome浏览器自动化测试时进行配置。下面是一些常用的Options参数及其用法: 1. --headless:设置无头模式,即在后台运行浏览器而不显示图形界面。可以提高测试效率,并节省计算资源。 2. --disable-gpu:禁用GPU加速。有些时候,GPU加速可能导致浏览器无法正常工作,禁用它可以解决一些兼容性问题。 3. --disable-extensions:禁用浏览器扩展程序。有些扩展程序可能会干扰自动化测试的进行,禁用它们可以提高测试的稳定性。 4. --disable-infobars:禁用浏览器顶部的信息栏。有些站点可能会通过弹出信息栏来干扰测试过程,禁用它可以避免干扰。 5. --start-maximized:启动时最大化浏览器窗口。默认情况下,启动时浏览器窗口是最小化的,通过设置这个参数可以让窗口最大化,方便观察测试过程。 6. --lang=xxx:设置浏览器的语言。有些站点的内容可能根据语言设置而变化,可以通过设置这个参数来模拟不同的语言环境。 以上只是常用的一些Options参数,实际上还有很多其他参数可以用来控制浏览器的行为。通过结合这些参数的使用,可以更加灵活地进行自动化测试,满足不同测试需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值