Selenium 与 chromedriver 根据“无头”参数给出不同的结果

2023-12-28

我一直在使用 Selenium + Chromedriver,我注意到根据是否启用或禁用 headless,我得到了不同的结果。经过一番调查,我发现“无头”不包括Accept-Language header.

有没有办法手动将其添加到标题中?


理想情况下,使用和不使用--headless选项不应对其中的元素产生任何重大影响DOM Tree https://javascript.info/dom-nodes得到渲染,但可能有显着差异Viewport https://www.w3schools.com/css/css_rwd_viewport.asp被关注到。

例如,当 ChromeDriver/Chrome 与--headless选项默认Viewport is

width = 800px, height = 600px 

当 ChromeDriver/Chrome 初始化时没有--headless选项默认Viewport is:

width = 1050px, height = 708px
  • 示例代码(基于Python):

    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
    
    options = webdriver.ChromeOptions()
    options.add_argument("--headless")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.google.com/")
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "q")))
    print ("Headless Chrome Initialized")
    size = driver.get_window_size()
    print("Window size: width = {}px, height = {}px".format(size["width"], size["height"]))
    driver.quit()
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.google.com/")
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "q")))
    print ("Chrome Initialized")
    size = driver.get_window_size()
    print("Window size: width = {}px, height = {}px".format(size["width"], size["height"]))
    
  • 控制台输出:

    Headless Chrome Initialized
    Window size: width = 800px, height = 600px
    Chrome Initialized
    Window size: width = 1050px, height = 708px
    

所以可以得出结论--headless选项 ChromeDriver/Chrome 打开会话,减少Viewport因此识别出的元素数量较少。


Solution

使用 ChromeDriver/Chrome 启动浏览实例始终打开于maximized mode:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("--headless")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get("https://www.google.com/")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium 与 chromedriver 根据“无头”参数给出不同的结果 的相关文章

  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 如何将jscrollpane添加到jframe?

    我有以下源代码 有人可以给我建议如何将 jscrollpane 添加到 jframe 上吗 我尝试了几次将其添加到 jframe 但没有任何进展 它甚至没有显示 public class Form3 JFrame jframe new JF
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • 在 MongoDB 和 Apache Solr 之间同步数据的简单方法

    我最近开始使用 MongoDB 和 Apache Solr 我使用 MongoDB 作为数据存储 并且希望 Apache Solr 为我的数据创建索引 以实现应用程序中的搜索功能 经过一些研究 我发现 基本上有两种方法可以在 MongoDB
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • watir selenium:浏览器构造函数无法识别的参数

    在我的 Rails 应用程序中 我有一个 nokogiri watir 爬虫 运行良好 在我升级了 gems 也升级了例如 selenium 后 当我使用以下命令打开爬虫浏览器时 BROWSER OPTIONS w headless no
  • 悬停 CSS 仅适用于 Chrome

    嘿 我正在尝试使用 CSS 悬停类 它在 Chrome 上运行良好 但在 Firefox 上运行不佳 任何帮助表示赞赏 这是我的 CSS albumbox labeltext visibility hidden albumbox hover
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • Lombok @Builder 不创建不可变对象?

    在很多网站上 我看到 lombok Builder 可以用来创建不可变的对象 https www baeldung com lombok builder singular https www baeldung com lombok buil
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • ArrayList.clear() 和 ArrayList.removeAll() 有什么区别?

    假如说arraylist定义为ArrayList

随机推荐

  • 如果路径以“/api”开头并且有一个映射为后备的文件,如何返回 404?

    我有一个 ASP NET Core 6 0 应用程序 WeatherForecastController index html in wwwroot folder 我已经配置了index html作为文件后备 这是main的方法progra
  • 没有省略值的分组非密集排名

    我有以下数据框 df lt data frame date c 1 1 1 1 2 2 2 2 3 3 3 3 id c 4 4 2 4 1 2 3 1 2 2 1 1 我想添加一个新列grp它对每个日期的 ID 进行排名 关系应具有相同的
  • 数据库查询和插入速度取决于什么?

    在我的工作中 我们有一个小型数据库 有 200 个表 总共可能有 100 万行左右 我一直期望它的速度相当快 每秒插入数万次 并且一旦建立连接 查询只需几毫秒 恰恰相反 我们遇到了一些性能问题 因此我们每秒只能进行几百次插入和查询 即使是最
  • Rails 3 + Carrierwave + nginx = 权限被拒绝

    我已经用 rmagick 安装了 Carrierwave gem 如果通过 WEBrick 加载 我可以让它正常工作 但在尝试使用 nginx 时会出现 500 内部服务器错误 nginx error log 说 2011 08 14 10
  • Jetpack 将数字输入到文本字段

    当键盘的 KeyboardType 设置为 KeyboardType Number 时 我当前无法捕获用户输入到文本字段中 如果键盘设置为 KeyboardType Text 则文本字段会按预期更新 但是当设置为 KeyboardType
  • Heroku 无法在 Visual Studio Code 中加载

    heroku File C Users mar AppData Roaming npm heroku ps1 cannot be loaded The file C Users mar AppData Roaming npm heroku
  • 熟悉 SilverStripe 吗?您的意见/印象是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Firebase 部署显示没有应用内容的欢迎屏幕

    我克隆了一个快速启动角度应用程序 我跑firebase init and firebase deploy 输出显示部署成功 我导航到url https scratch app 8fde2 firebaseapp com 但它只显示欢迎屏幕
  • 初始化对象的编码模式 - 构造函数(新)与 Object.create() (Crockford)

    注意 这不是一个关于经典继承和原型继承的问题 这是关于使用什么编码模式来初始化对象 类构造函数创建并初始化对象 同时避免new运营商并走向Object create 仅创建对象并设置原型链 我还没有找到一个在线资源来解释在使用 Crockf
  • 为什么反应钩子形式输入中的第一个字母是死的

    我需要帮助来理解为什么简单输入组件中的第一个字母没有注册 我从示例中创建了一个简单的受控输入 但它无法正常工作 我为你创建了一个例子https stackblitz com edit react 9zezqx https stackblit
  • CMake:将 ELF 嵌入可执行文件

    我有一个项目需要访问嵌入到可执行文件中的 ELF 文件特别部分 https stackoverflow com questions 2627004 embedding binary blobs using gcc mingw 我之前手工制作
  • 交易ID设置正确,但稍后仅显示提交

    我的代码给出了正确的响应并正确设置了交易 ID 但是在屏幕上 我第一次提交时缺少ID 当我返回并再次提交时 屏幕上的ID就是第一笔交易的ID On the 首先提交 这被渲染为 MOBILE NUMBER 9129992929 OPERAT
  • 如何在 Hibernate 中限制数据库级别的用户访问

    The App 我需要实现一个可供不同用户使用的网络应用程序 每个用户对不同的表有不同的权限 例如 用户 A 可以看到表中的 名称 和 地址 字段Student 用户 B 可以看到表中的 姓名 和 电话号码 字段 但看不到 地址 Stude
  • 如何从 Python 中的元组中获取整数?

    我有一个包含两个数字的元组 我需要获取这两个数字 第一个数字是 x 坐标 第二个数字是 y 坐标 我的伪代码是我关于如何去做的想法 但是我不太确定如何让它工作 伪代码 tuple 46 153 string str tuple ss str
  • 使用 sass 连接字符串

    我想写一个像这样的 sass 循环 fractions for i from 1 through 4 fractions fractions 1fr grid i grid template columns fractions displa
  • Autofac - 如何创建带有参数的生成工厂

    我正在尝试使用 Autofac 创建一个 生成 工厂 它将根据枚举参数实时解决依赖关系 给定以下接口 类 public delegate IConnection ConnectionFactory ConnectionType connec
  • 如何使用 FileFields 限制 ModelForms 文件上传的文件类型?

    我的目标是将 Django ModelForm 上的 FileField 限制为 PDF 和 Word 文档 我在谷歌上搜索到的答案都涉及创建一个单独的文件处理程序 但我不确定如何在 ModelForm 的上下文中执行此操作 我可以使用 s
  • 限制 Magento SOAP 查询的结果集

    如何为 Magento SOAP 查询指定最大结果集 我正在通过 SOAP API 查询 Magento 以获取与给定状态匹配的订单列表 我们有一些远程主机需要很长时间才能返回列表 因此我想限制结果集 但我没有看到这方面的参数 orderL
  • 使用 underscore.js 迭代对象

    因此 我正在学习backbone js 并且目前正在使用下面的示例在视图中迭代一些模型 第一个片段有效 而另一个基于 underscore js 的片段则无效 为什么 1 Working this collection each funct
  • Selenium 与 chromedriver 根据“无头”参数给出不同的结果

    我一直在使用 Selenium Chromedriver 我注意到根据是否启用或禁用 headless 我得到了不同的结果 经过一番调查 我发现 无头 不包括Accept Language header 有没有办法手动将其添加到标题中 理想