我们可以在 python selenium webdriver 中缩放浏览器 window 吗?
Can we Zoom the browser window in python selenium webdriver?
我正在尝试仅使用键盘放大和缩小 Chrome(selenium webdriver)。我试过了--
from selenium.webdriver.common.keys import Keys
driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL,Keys.SUBTRACT).
但它不起作用。需要在 python 中回答。
我正为此苦苦挣扎。我设法找到了适合我的东西,希望对你有用:
driver.execute_script("document.body.style.zoom='zoom %'")
有 'zoom%' = 您想要的任何缩放级别。 (例如“67%”)
正如您提到的 Need it to work in Chrome. The current solutions are only for Firefox
,这里有一些更新和选项:
缩放 CSS :
driver.execute_script("document.body.style.zoom='150%'")
这个选项对我有用。但它会缩放 CSS,而不是 Chrome 浏览器。所以你可能没有在看那个。
放大和缩小 Chrome 浏览器:
在 4131
, 4133
and 1621
之后 fullscreen()
模式通过 Selenium-Java 客户端支持 Zoom In
但尚未公开发布到 PyPI.
I can see it's implemented but not pushed. Selenium 3.7 (Python)
will be out soon. The push to sync version numbers will include that.
- 配置
webdriver
打开浏览器:
如果你的要求是在Full Screen
模式下执行Test Suite
,你总是可以使用Options
Class并使用 --kiosk
参数配置 webdriver 实例,如下所示:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--kiosk")
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get('https://www.google.co.in')
是的,您可以调用 Chrome 驱动程序进行缩放,而无需使用 CSS。 Chrome DevTools Protocol Viewer 中打包了一些方法,其中之一是 Input.synthesizePinchGesture
又名缩放 in/out.
为了便于使用,关于 DevTools 协议 API,我们将使用一个名为 MyChromeDriver
的 class webdriver.Chrome
作为元class 和将这些命令发送到 Chrome:
的新方法
# selenium
from selenium import webdriver
# json
import json
class MyChromeDriver(webdriver.Chrome):
def send_cmd(self, cmd, params):
resource = "/session/%s/chromium/send_command_and_get_result" % self.session_id
url = self.command_executor._url + resource
body = json.dumps({'cmd':cmd, 'params': params})
response = self.command_executor._request('POST', url, body)
return response.get('value')
1.设置我们的 webdriver 和 get
一些页面:
webdriver = MyChromeDriver()
webdriver.get("https://google.com")
2。通过我们的新方法 send_cmd
:
发送 Chrome Input.synthesizePinchGesture
命令 及其 parameters
webdriver.send_cmd('Input.synthesizePinchGesture', {
'x': 0,
'y': 0,
'scaleFactor': 2,
'relativeSpeed': 800, # optional
'gestureSourceType': 'default' # optional
})
3。瓦拉! Chrome 的缩放被调用:
附带说明一下,send_cmd
还可以使用许多其他命令。在这里找到它们:https://chromedevtools.github.io/devtools-protocol/
基于这个答案:
环境:
- 硒 3.6.0
- chrome驱动程序 2.33
- Chrome 版本 62.0.3202.75(正式版)(64 位)
- macOS 塞拉利昂 10.12.6
我尝试了过去人们在其他问题中建议的方法(不使用 CSS)。比如这道题的答案:Selenium webdriver zoom in/out page content.
或者这样:Test zoom levels of page on browsers
没有成功。
所以,我想:如果不使用快捷方式,还有什么不同的方法可以做到这一点?
想法是使用“chrome://settings/”页面来更改缩放:
好的,我知道,例如 , that every settings should be set in the ChromeOptions。
来自 I noticed that in the list of preferences 的唯一参数(我认为)可能是:
// Double that indicates the default zoom level.
const char kPartitionDefaultZoomLevel[] = "partition.default_zoom_level";
我试过了,没有成功。
我想重复一遍,我知道这不是正确的方法(不同的浏览器版本会有所不同),但它有效,至少对我了解如何进入用硒遮蔽根元素。
下面的方法return影子根里面的元素:
def expand_shadow_element(element):
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
它很有用,因为在 chrome://settings/
页面中有影子根元素。
为了在我的浏览器中执行此操作,这是路径:
root1=driver.find_element_by_xpath("*//settings-ui")
shadow_root1 = expand_shadow_element(root1)
container= shadow_root1.find_element_by_id("container")
root2= container.find_element_by_css_selector("settings-main")
shadow_root2 = expand_shadow_element(root2)
root3=shadow_root2.find_element_by_css_selector("settings-basic-page")
shadow_root3 = expand_shadow_element(root3)
basic_page = shadow_root3.find_element_by_id("basicPage")
settings_section= basic_page.find_element_by_xpath(".//settings-section[@section='appearance']")
root4= settings_section.find_element_by_css_selector("settings-appearance-page")
shadow_root4=expand_shadow_element(root4)
最后:
settings_animated_pages= shadow_root4.find_element_by_id("pages")
neon_animatable=settings_animated_pages.find_element_by_css_selector("neon-animatable")
zoomLevel= neon_animatable.find_element_by_xpath(".//select[@id='zoomLevel']/option[@value='0.5']")
zoomLevel.click()
完整代码:
driver = webdriver.Chrome(executable_path=r'/pathTo/chromedriver')
def expand_shadow_element(element):
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
driver.get('chrome://settings/')
root1=driver.find_element_by_xpath("*//settings-ui")
shadow_root1 = expand_shadow_element(root1)
container= shadow_root1.find_element_by_id("container")
root2= container.find_element_by_css_selector("settings-main")
shadow_root2 = expand_shadow_element(root2)
root3=shadow_root2.find_element_by_css_selector("settings-basic-page")
shadow_root3 = expand_shadow_element(root3)
basic_page = shadow_root3.find_element_by_id("basicPage")
settings_section= basic_page.find_element_by_xpath(".//settings-section[@section='appearance']")
root4= settings_section.find_element_by_css_selector("settings-appearance-page")
shadow_root4=expand_shadow_element(root4)
settings_animated_pages= shadow_root4.find_element_by_id("pages")
neon_animatable=settings_animated_pages.find_element_by_css_selector("neon-animatable")
zoomLevel= neon_animatable.find_element_by_xpath(".//select[@id='zoomLevel']/option[@value='0.5']")
zoomLevel.click()
driver.get("https://www.google.co.uk/")
编辑
如评论中的 by @Florent B,我们可以简单地获得相同的结果:
driver.get('chrome://settings/')
driver.execute_script('chrome.settingsPrivate.setDefaultZoom(1.5);')
driver.get("https://www.google.co.uk/")
我的 firefox 解决方案,
Zoom body browser
缩放是 non-standard 属性,请改用变换(演示):
driver.execute_script("document.body.style.transform = 'scale(0.8)'")
https://github.com/SeleniumHQ/selenium/issues/4244
driver.execute_script('document.body.style.MozTransform = "scale(0.50)";')
driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')
我正在尝试仅使用键盘放大和缩小 Chrome(selenium webdriver)。我试过了--
from selenium.webdriver.common.keys import Keys
driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL,Keys.SUBTRACT).
但它不起作用。需要在 python 中回答。
我正为此苦苦挣扎。我设法找到了适合我的东西,希望对你有用:
driver.execute_script("document.body.style.zoom='zoom %'")
有 'zoom%' = 您想要的任何缩放级别。 (例如“67%”)
正如您提到的 Need it to work in Chrome. The current solutions are only for Firefox
,这里有一些更新和选项:
缩放 CSS :
driver.execute_script("document.body.style.zoom='150%'")
这个选项对我有用。但它会缩放 CSS,而不是 Chrome 浏览器。所以你可能没有在看那个。
放大和缩小 Chrome 浏览器:
在 4131
, 4133
and 1621
之后 fullscreen()
模式通过 Selenium-Java 客户端支持 Zoom In
但尚未公开发布到 PyPI.
I can see it's implemented but not pushed.
Selenium 3.7 (Python)
will be out soon. The push to sync version numbers will include that.
- 配置
webdriver
打开浏览器:
如果你的要求是在Full Screen
模式下执行Test Suite
,你总是可以使用Options
Class并使用 --kiosk
参数配置 webdriver 实例,如下所示:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--kiosk")
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get('https://www.google.co.in')
是的,您可以调用 Chrome 驱动程序进行缩放,而无需使用 CSS。 Chrome DevTools Protocol Viewer 中打包了一些方法,其中之一是 Input.synthesizePinchGesture
又名缩放 in/out.
为了便于使用,关于 DevTools 协议 API,我们将使用一个名为 MyChromeDriver
的 class webdriver.Chrome
作为元class 和将这些命令发送到 Chrome:
# selenium
from selenium import webdriver
# json
import json
class MyChromeDriver(webdriver.Chrome):
def send_cmd(self, cmd, params):
resource = "/session/%s/chromium/send_command_and_get_result" % self.session_id
url = self.command_executor._url + resource
body = json.dumps({'cmd':cmd, 'params': params})
response = self.command_executor._request('POST', url, body)
return response.get('value')
1.设置我们的 webdriver 和 get
一些页面:
webdriver = MyChromeDriver()
webdriver.get("https://google.com")
2。通过我们的新方法 send_cmd
:
Input.synthesizePinchGesture
命令 及其 parameters
webdriver.send_cmd('Input.synthesizePinchGesture', {
'x': 0,
'y': 0,
'scaleFactor': 2,
'relativeSpeed': 800, # optional
'gestureSourceType': 'default' # optional
})
3。瓦拉! Chrome 的缩放被调用:
附带说明一下,send_cmd
还可以使用许多其他命令。在这里找到它们:https://chromedevtools.github.io/devtools-protocol/
基于这个答案:
环境:
- 硒 3.6.0
- chrome驱动程序 2.33
- Chrome 版本 62.0.3202.75(正式版)(64 位)
- macOS 塞拉利昂 10.12.6
我尝试了过去人们在其他问题中建议的方法(不使用 CSS)。比如这道题的答案:Selenium webdriver zoom in/out page content.
或者这样:Test zoom levels of page on browsers
没有成功。
所以,我想:如果不使用快捷方式,还有什么不同的方法可以做到这一点?
想法是使用“chrome://settings/”页面来更改缩放:
好的,我知道,例如
来自
// Double that indicates the default zoom level.
const char kPartitionDefaultZoomLevel[] = "partition.default_zoom_level";
我试过了,没有成功。
我想重复一遍,我知道这不是正确的方法(不同的浏览器版本会有所不同),但它有效,至少对我了解如何进入用硒遮蔽根元素。
下面的方法return影子根里面的元素:
def expand_shadow_element(element):
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
它很有用,因为在 chrome://settings/
页面中有影子根元素。
为了在我的浏览器中执行此操作,这是路径:
root1=driver.find_element_by_xpath("*//settings-ui")
shadow_root1 = expand_shadow_element(root1)
container= shadow_root1.find_element_by_id("container")
root2= container.find_element_by_css_selector("settings-main")
shadow_root2 = expand_shadow_element(root2)
root3=shadow_root2.find_element_by_css_selector("settings-basic-page")
shadow_root3 = expand_shadow_element(root3)
basic_page = shadow_root3.find_element_by_id("basicPage")
settings_section= basic_page.find_element_by_xpath(".//settings-section[@section='appearance']")
root4= settings_section.find_element_by_css_selector("settings-appearance-page")
shadow_root4=expand_shadow_element(root4)
最后:
settings_animated_pages= shadow_root4.find_element_by_id("pages")
neon_animatable=settings_animated_pages.find_element_by_css_selector("neon-animatable")
zoomLevel= neon_animatable.find_element_by_xpath(".//select[@id='zoomLevel']/option[@value='0.5']")
zoomLevel.click()
完整代码:
driver = webdriver.Chrome(executable_path=r'/pathTo/chromedriver')
def expand_shadow_element(element):
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
driver.get('chrome://settings/')
root1=driver.find_element_by_xpath("*//settings-ui")
shadow_root1 = expand_shadow_element(root1)
container= shadow_root1.find_element_by_id("container")
root2= container.find_element_by_css_selector("settings-main")
shadow_root2 = expand_shadow_element(root2)
root3=shadow_root2.find_element_by_css_selector("settings-basic-page")
shadow_root3 = expand_shadow_element(root3)
basic_page = shadow_root3.find_element_by_id("basicPage")
settings_section= basic_page.find_element_by_xpath(".//settings-section[@section='appearance']")
root4= settings_section.find_element_by_css_selector("settings-appearance-page")
shadow_root4=expand_shadow_element(root4)
settings_animated_pages= shadow_root4.find_element_by_id("pages")
neon_animatable=settings_animated_pages.find_element_by_css_selector("neon-animatable")
zoomLevel= neon_animatable.find_element_by_xpath(".//select[@id='zoomLevel']/option[@value='0.5']")
zoomLevel.click()
driver.get("https://www.google.co.uk/")
编辑
如评论中的
driver.get('chrome://settings/')
driver.execute_script('chrome.settingsPrivate.setDefaultZoom(1.5);')
driver.get("https://www.google.co.uk/")
我的 firefox 解决方案,
Zoom body browser
缩放是 non-standard 属性,请改用变换(演示):
driver.execute_script("document.body.style.transform = 'scale(0.8)'")
https://github.com/SeleniumHQ/selenium/issues/4244
driver.execute_script('document.body.style.MozTransform = "scale(0.50)";')
driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')