Python Selenium Firefox 壁虎驱动程序。从终端分离浏览器
Python Selenium Firefox geckodriver. Detach browser from terminal
有了Chrome(chromedriver)就很简单了:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option('detach', True)
使用 Firefox (geckodriver) 否:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_experimental_option('detach', True) # Returns syntax error
即使在脚本结束时也让 Firefox 浏览器保持打开状态的等效语法是什么?
如果您从不调用 driver.close()
,浏览器 window 将保持打开状态,您可以 examine/use 随心所欲。你试过这个吗?
Chrome(chromedriver)和Firefox(geckodriver)的底层结构不同
例如 add_experimental_option 存在于 chromedriver
add_experimental_option 在 geckodriver 中不存在,所以这就是您收到错误的原因。
我查看了各种 geckodriver 文档,但没有看到 chromedriver 中与此类似的参考。
请注意下面的 options_spec.rb 代码来自 Ruby 来源
硒代码。
下面的代码来自文件 options_spec.rb,它是 selenium 源代码的一部分 chromedriver. 注意字典中的detach: true.
opts = Options.new(browser_version: '75',
platform_name: 'win10',
accept_insecure_certs: false,
page_load_strategy: 'eager',
unhandled_prompt_behavior: 'accept',
strict_file_interactability: true,
timeouts: {script: 40000,
page_load: 400000,
implicit: 1},
set_window_rect: false,
args: %w[foo bar],
prefs: {foo: 'bar'},
binary: '/foo/bar',
extensions: ['foo.crx', 'bar.crx'],
encoded_extensions: ['encoded_foobar'],
foo: 'bar',
emulation: {device_name: :bar},
local_state: {foo: 'bar'},
detach: true,
debugger_address: '127.0.0.1:8181',
exclude_switches: %w[foobar barfoo],
minidump_path: 'linux/only',
perf_logging_prefs: {enable_network: true},
window_types: %w[normal devtools],
'custom:options': {foo: 'bar'})
下面的代码来自文件 options_spec.rb,它是 selenium 源代码的一部分 geckodriver. 注意字典里没有 detach: true.
opts = Options.new(browser_version: '66',
platform_name: 'win10',
accept_insecure_certs: false,
page_load_strategy: 'eager',
unhandled_prompt_behavior: 'accept',
strict_file_interactability: true,
timeouts: {script: 40000,
page_load: 400000,
implicit: 1},
set_window_rect: false,
args: %w[foo bar],
binary: '/foo/bar',
prefs: {foo: 'bar'},
foo: 'bar',
profile: profile,
log_level: :debug,
'custom:options': {foo: 'bar'})
下面的代码来自文件 options_spec.rb,它是 selenium 源代码的一部分 edgedriver. 注意字典里有一个detach: true.
opts = Options.new(browser_version: '75',
platform_name: 'win10',
accept_insecure_certs: false,
page_load_strategy: 'eager',
unhandled_prompt_behavior: 'accept',
strict_file_interactability: true,
timeouts: {script: 40000,
page_load: 400000,
implicit: 1},
set_window_rect: false,
args: %w[foo bar],
prefs: {foo: 'bar'},
binary: '/foo/bar',
extensions: ['foo.crx', 'bar.crx'],
encoded_extensions: ['encoded_foobar'],
foo: 'bar',
emulation: {device_name: :bar},
local_state: {foo: 'bar'},
detach: true,
debugger_address: '127.0.0.1:8181',
exclude_switches: %w[foobar barfoo],
minidump_path: 'linux/only',
perf_logging_prefs: {enable_network: true},
window_types: %w[normal devtools],
'custom:options': {foo: 'bar'})
根据这 3 个选项文件中的字典,人们会假设 {'detach': True} 不是 中的一个选项壁虎司机.
options.py为geckodriver在Pythonselenium[=74] =] 结构不同于 Ruby 文件 options_spec.rb.
def preferences(self) -> dict:
""":Returns: A dict of preferences."""
return self._preferences
def set_preference(self, name: str, value: Union[str, int, bool]):
"""Sets a preference."""
self._preferences[name] = value
在 Mozilla 的 gecko-dev GitHub 存储库中查看 Python geckodriver 的源代码时,我看到我可以查询 pre-defined 偏好和能力。
from selenium.webdriver.firefox.options import Options
firefox_options = Options()
print(firefox_options.arguments)
# output
['--test-type', '--ignore-certificate-errors', '--disable-infobars', '--disable-extensions', '--disable-popup-blocking']
print(firefox_options.capabilities)
# output
{'browserName': 'firefox', 'marionette': True, 'acceptInsecureCerts': True}
print(firefox_options.preferences)
# output
{'detach': True}
所以 {'detach': True} 是 geckodriver 中的一个选项, 所以您应该可以这样设置选项:
firefox_options.set_preference('detach', True)
有了Chrome(chromedriver)就很简单了:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option('detach', True)
使用 Firefox (geckodriver) 否:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_experimental_option('detach', True) # Returns syntax error
即使在脚本结束时也让 Firefox 浏览器保持打开状态的等效语法是什么?
如果您从不调用 driver.close()
,浏览器 window 将保持打开状态,您可以 examine/use 随心所欲。你试过这个吗?
Chrome(chromedriver)和Firefox(geckodriver)的底层结构不同
例如 add_experimental_option 存在于 chromedriver
add_experimental_option 在 geckodriver 中不存在,所以这就是您收到错误的原因。
我查看了各种 geckodriver 文档,但没有看到 chromedriver 中与此类似的参考。
请注意下面的 options_spec.rb 代码来自 Ruby 来源 硒代码。
下面的代码来自文件 options_spec.rb,它是 selenium 源代码的一部分 chromedriver. 注意字典中的detach: true.
opts = Options.new(browser_version: '75',
platform_name: 'win10',
accept_insecure_certs: false,
page_load_strategy: 'eager',
unhandled_prompt_behavior: 'accept',
strict_file_interactability: true,
timeouts: {script: 40000,
page_load: 400000,
implicit: 1},
set_window_rect: false,
args: %w[foo bar],
prefs: {foo: 'bar'},
binary: '/foo/bar',
extensions: ['foo.crx', 'bar.crx'],
encoded_extensions: ['encoded_foobar'],
foo: 'bar',
emulation: {device_name: :bar},
local_state: {foo: 'bar'},
detach: true,
debugger_address: '127.0.0.1:8181',
exclude_switches: %w[foobar barfoo],
minidump_path: 'linux/only',
perf_logging_prefs: {enable_network: true},
window_types: %w[normal devtools],
'custom:options': {foo: 'bar'})
下面的代码来自文件 options_spec.rb,它是 selenium 源代码的一部分 geckodriver. 注意字典里没有 detach: true.
opts = Options.new(browser_version: '66',
platform_name: 'win10',
accept_insecure_certs: false,
page_load_strategy: 'eager',
unhandled_prompt_behavior: 'accept',
strict_file_interactability: true,
timeouts: {script: 40000,
page_load: 400000,
implicit: 1},
set_window_rect: false,
args: %w[foo bar],
binary: '/foo/bar',
prefs: {foo: 'bar'},
foo: 'bar',
profile: profile,
log_level: :debug,
'custom:options': {foo: 'bar'})
下面的代码来自文件 options_spec.rb,它是 selenium 源代码的一部分 edgedriver. 注意字典里有一个detach: true.
opts = Options.new(browser_version: '75',
platform_name: 'win10',
accept_insecure_certs: false,
page_load_strategy: 'eager',
unhandled_prompt_behavior: 'accept',
strict_file_interactability: true,
timeouts: {script: 40000,
page_load: 400000,
implicit: 1},
set_window_rect: false,
args: %w[foo bar],
prefs: {foo: 'bar'},
binary: '/foo/bar',
extensions: ['foo.crx', 'bar.crx'],
encoded_extensions: ['encoded_foobar'],
foo: 'bar',
emulation: {device_name: :bar},
local_state: {foo: 'bar'},
detach: true,
debugger_address: '127.0.0.1:8181',
exclude_switches: %w[foobar barfoo],
minidump_path: 'linux/only',
perf_logging_prefs: {enable_network: true},
window_types: %w[normal devtools],
'custom:options': {foo: 'bar'})
根据这 3 个选项文件中的字典,人们会假设 {'detach': True} 不是 中的一个选项壁虎司机.
options.py为geckodriver在Pythonselenium[=74] =] 结构不同于 Ruby 文件 options_spec.rb.
def preferences(self) -> dict:
""":Returns: A dict of preferences."""
return self._preferences
def set_preference(self, name: str, value: Union[str, int, bool]):
"""Sets a preference."""
self._preferences[name] = value
在 Mozilla 的 gecko-dev GitHub 存储库中查看 Python geckodriver 的源代码时,我看到我可以查询 pre-defined 偏好和能力。
from selenium.webdriver.firefox.options import Options
firefox_options = Options()
print(firefox_options.arguments)
# output
['--test-type', '--ignore-certificate-errors', '--disable-infobars', '--disable-extensions', '--disable-popup-blocking']
print(firefox_options.capabilities)
# output
{'browserName': 'firefox', 'marionette': True, 'acceptInsecureCerts': True}
print(firefox_options.preferences)
# output
{'detach': True}
所以 {'detach': True} 是 geckodriver 中的一个选项, 所以您应该可以这样设置选项:
firefox_options.set_preference('detach', True)