- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 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 v3.8.1
、ghostdriver v1.2.0
和 phantomjs 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"}}
因此,默认情况下,必须通过 PhantomJSDriver
和 Ghost 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
属性javascriptEnabled和takesScreenshot默认为必需的强制配置。
<小时/>正如您在评论中提到的在 Ghostdriver session 建立后更改这些内容(即 page.onInitialized)怎么样?直接的答案是否。
功能
被卡住并协商以初始化浏览 session
后,功能
code> 一直保持 true,直到特定的 session 处于事件状态
。因此,一旦 session 建立
,您就无法更改任何功能
。要更改功能
,您必须再次配置WebDriver
实例。
关于javascript - 如何在 python selenium 中禁用 PhantomJS 的屏幕截图和 javascript?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/48334865/
我是一名优秀的程序员,十分优秀!