gpt4 book ai didi

javascript - 如何在 python selenium 中禁用 PhantomJS 的屏幕截图和 javascript?

转载 作者:行者123 更新时间:2023-12-03 02:40:44 27 4
gpt4 key购买 nike

我正在 Windows 上使用 phantomJS 在 python/selenium 框架中进行抓取。首先,我尝试使用 selenium 禁用 javascript 和 screensots:

driver = webdriver.PhantomJS("phantomjs.exe", desired_capabilities = dcap)
webdriver.DesiredCapabilities.PHANTOMJS["phantomjs.page.settings.javascriptEnabled"] = False
webdriver.DesiredCapabilities.PHANTOMJS["phantomjs.takesScreenshot"] = False
webdriver.DesiredCapabilities.PHANTOMJS["phantomjs.page.clearMemoryCash"] = False

但是,当我查看 ghostdriver.log 时,Session.negotiedCapability 包括:

browserName:phantomjs
version:2.1.1
driverName:ghostdriver
driverVersion:1.2.0
platform:windows-7-32bit
javascriptEnabled:true # Should be false
takesScreenshot:true # Should be false

因此,我认为我需要在 onInitialized=function() 期间禁用这两个参数,类似于下面的代码片段:

phantom_exc_uri='/session/$sessionId/phantom/execute'
driver.command_executor._commands['executePhantomScript'] = ('POST', phantom_exc_uri)
initScript="""
this.onInitialized=function() {
var page=this;
### disable javascript and screenshots here ###
}
"""
driver.execute('executePhantomScript',{'script': initScript, 'args': []})

问题 1:为什么我可以在 webdriver.DesiredCapability 中设置一些 phantomJS 规范,但其他规范却不能?这是我的错误还是一些错误?

Q2:在 onInitialized 期间完成此操作是否合理,或者我的方式是否错误?

Q2:如果是的话,如何在onInitialized时禁用JS和截图?

最佳答案

您在问题中提出了很多疑问。让我尝试解决所有这些问题。使用 Selenium v​​3.8.1ghostdriver v1.2.0phantomjs v2.1.1 Browser 的简单工作流程向我们展示了以下Session.默认情况下传递协商能力:

  • "browserName":"phantomjs"
  • "版本":"2.1.1"
  • "driverName":"ghostdriver"
  • "driverVersion":"1.2.0"
  • "平台":"windows-8-32bit"
  • "javascriptEnabled":true
  • "takesScreenshot":true
  • "handlesAlerts":false
  • "databaseEnabled":false
  • "locationContextEnabled":false
  • "applicationCacheEnabled":false
  • "cssSelectorsEnabled":true
  • "webStorageEnabled":false
  • "可旋转":false
  • "acceptSslCerts":false
  • "nativeEvents":true
  • "proxy":{"proxyType":"direct"}}

因此,默认情况下,必须通过 PhantomJSDriverGhost Browser 组合以下功能来建立成功的 session strong> 是最低要求。

然后,用户可以使用 DesiredCapability 类来调整功能。但某些功能是创建成功的 Ghost Browser session 的最低要求

javascriptEnabled 就是这样一个强制属性。直到几个版本之前,Selenium 确实允许将 javascriptEnabled 属性调整为 false。但现在 WebDriver 已成为 W3C 推荐候选,强制功能无法再通过 DesiredCapability 覆盖 在用户级别。

即使您尝试在用户级别调整它们,WebDriver也会在配置功能时将它们覆盖为默认值。

所以,尽管您已经尝试过以下操作:

webdriver.DesiredCapabilities.PHANTOMJS["phantomjs.page.settings.javascriptEnabled"] = False
webdriver.DesiredCapabilities.PHANTOMJS["phantomjs.takesScreenshot"] = False

属性javascriptEnabledtakesScreenshot默认为必需的强制配置。

<小时/>

更新

正如您在评论中提到的在 Ghostdriver session 建立后更改这些内容(即 page.onInitialized)怎么样?直接的答案是



功能卡住协商以初始化浏览 session 后,功能 code> 一直保持 true,直到特定的 session 处于事件状态。因此,一旦 session 建立,您就无法更改任何功能。要更改功能,您必须再次配置WebDriver实例。








关于javascript - 如何在 python selenium 中禁用 PhantomJS 的屏幕截图和 javascript?,我们在Stack Overflow上找到一个类似的问题:

https://stackoverflow.com/questions/48334865/




27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com