一、关于回答
每当咱们遇到问题的时候,总会是先询问百度,然后再去其他地方验证答案,但是有些人总是会调皮一些,并不是完全给出正确答案,需要读者自己去取证,譬如一些解决问题的版本号,他不明说,需要在正确的版本解决,这不把读者给直逼逼到这儿吐槽。
二、无头模式
2.1、Edge无头模式
在选择selenium工具做UI自动化(浏览器兼容)的时候,为了提升效率和跨平台而选择无头模式,所以会参照chrome浏览器的实现方式,这初始化浏览器对象的时候,给它一些建议
- chrome浏览器的无头建议如下:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
ch_options = Options()
ch_options.add_argument("--headless") # => 为Chrome配置无头模式
# 在启动浏览器时加入配置
driver = webdriver.Chrome(chrome_options=ch_options) # => 注意这里的参数
driver.get('http://baidu.com')
driver.quit()
- 那么Edge浏览器的无头模式也是这样?
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.add_argument("--headless")
driver = webdriver.Edge(executable_path="./msedgedriver.exe",Options=edge_options)
driver.get("http://www.baidu.com")
driver.quit()
- 所以执行报错了
Edge Options 没有这个add_argument方法,所以题主也去看了看,确实没有。
三、版本原罪
3.1、selenium3确实没有Edge的Options的add_argument方法
那么如何正确解决Edge浏览器的无头模式呢?
PATH = "msedgedriver.exe"
EDGE = {
"browserName": "MicrosoftEdge",
"version": "",
"platform": "WINDOWS",
"ms:edgeOptions": {
'extensions': [],
'args': [
'--headless',
'--disable-gpu',
'--remote-debugging-port=9222',
]}
}
driver = webdriver.Edge(executable_path=path, capabilities=EDGE)
3.2、要勇敢怀疑每个答案,哪怕是自己的答案
当参照以往的经验不能解决实际问题时,就该想想是不是方法不对,尽管思路对了,但是实现却不能完全照搬,在编码的世界里,因为绝大多数都是搬运工,所以需要下很大功夫能看懂源码,做起事来才能事半功倍。
- 借鉴一下,应该还有不一样的解决办法:pip install msedge-selenium-tools
from selenium import webdriver
from msedge.selenium_tools import EdgeOptions
from msedge.selenium_tools import Edge
edge_options = EdgeOptions()
edge_options.use_chromium = True
# 设置无界面模式,也可以添加其它设置
edge_options.add_argument('headless')
driver = Edge(options=edge_options)
r = driver.get('https://www.baidu.com')
print(driver.title)
driver.quit()
四、总结
在为了实现UI自动化的时候,更多不是工作,而是兴趣,甚至可以说是挑战,那么下篇咱们讲讲为什么题主要写UI自动化、要用selenium、还需要无头模式?主要解决什么问题?等等一系列问题。
本篇呢,主要是提醒各位,在很多答案上,没有人会告诉你一遍就会成功的经验,都需要自己不断摸索,不断去尝试挑战。