我正试着只用键盘放大和缩小Chrome(Selum WebDriver)。我试过了
from selenium.webdriver.common.keys import Keys driver.find_element_by_tag_name("body").send_keys(Keys.CONTROL,Keys.SUBTRACT).
但这并不奏效。需要用Python回答。
kfgdxczn1#
我只是在和这件事作斗争。我设法找到了对我有用的东西,希望它对你也有用:
driver.execute_script("document.body.style.zoom='zoom %'")
有‘Zoom%’=任何您想要的缩放级别。(例如‘67%’)
yqkkidmi2#
环境:
我尝试了过去人们在其他问题中提出的方法(没有使用css)。例如,此问题中的答案:Selenium webdriver zoom in/out page content。或者这个:Test zoom levels of page on browsers但没有成功。所以,我想:如果没有捷径,还有什么不同的方式可以做到这一点呢?我们的想法是使用“Chrome://设置/”页面来更改缩放:
好的,我知道,例如从Going through Chrome://settings by Selenium,每个设置都应该在ChromeOptions中设置。从this question我注意到,在list of preferences中,唯一的参数(我认为)可能是:
// Double that indicates the default zoom level. const char kPartitionDefaultZoomLevel[] = "partition.default_zoom_level";
我试过了,但没有成功。我想重复一遍,我知道这不是正确的方法(不同的浏览器版本会有所不同),但它是有效的,至少对我理解如何进入带有 selenium 的影子根元素很有用。以下方法返回影子根内的元素:
def expand_shadow_element(element): shadow_root = driver.execute_script('return arguments[0].shadowRoot', element) return shadow_root
它很有用,因为在chrome://settings/页面中有影子根元素。为了在我的浏览器中做到这一点,路径如下:
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/")
编辑
正如@Florent B在评论中所建议的那样,我们可以通过以下简单操作获得相同的结果:
driver.get('chrome://settings/') driver.execute_script('chrome.settingsPrivate.setDefaultZoom(1.5);') driver.get("https://www.google.co.uk/")
3qpi33ja3#
火狐为我提供解决方案,Zoom body browserZoom是非标准属性,请改用Transform(演示):driver.execute_script("document.body.style.transform = 'scale(0.8)'")https://github.com/SeleniumHQ/selenium/issues/4244driver.execute_script('document.body.style.MozTransform = "scale(0.50)";')driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')
driver.execute_script("document.body.style.transform = 'scale(0.8)'")
driver.execute_script('document.body.style.MozTransform = "scale(0.50)";')
driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')
oknwwptz4#
可以,您可以调用Chrome驱动程序进行缩放,而不必使用css。Chrome DevTools协议查看器中包含了一些方法,其中一个是Input.synthesizePinchGesture,也就是放大/缩小。
Input.synthesizePinchGesture
为了便于使用,关于DevTools协议接口,我们将使用一个名为MyChromeDriver的类和webdriver.Chrome作为元类,并使用一个新的方法将这些命令发送到Chrome:
MyChromeDriver
webdriver.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某个页面:
get
webdriver = MyChromeDriver() webdriver.get("https://google.com")
2.通过我们的新方法send_cmd向Chrome发送Input.synthesizePinchGesture命令及其参数:
send_cmd
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/基于这个答案:用含 selenium 的Chrome截取全页屏幕
p3rjfoxz5#
正如您提到的Need it to work in Chrome. The current solutions are only for Firefox,以下是一些更新和选项:1.缩放css:
Need it to work in Chrome. The current solutions are only for Firefox
driver.execute_script("document.body.style.zoom='150%'")
这个选择对我来说确实奏效了。但它缩放的是css,而不是Chrome浏览器。所以,你可能没有看到这一点。1.放大和缩小Chrome浏览器:在4131、4133和1621之后,fullscreen()模式通过Selify-Java客户端支持到Zoom In,但还没有公开发布到PyPI。
4131
4133
1621
fullscreen()
Zoom In
我可以看到它是执行的,但不是推送的。Selenium 3.7 (Python)即将面世。同步版本号的推送将包括这一点。
Selenium 3.7 (Python)
1.配置webdriver打开浏览器:如果您的需求是在Full Screen模式下执行Test Suite,您可以始终使用**Options类,并使用--kiosk**参数配置WebDriver示例,如下所示:
webdriver
Full Screen
Test Suite
Options
--kiosk
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')
vc9ivgsu6#
# zoom in firefox browser driver.get("about:preferences") driver.execute_script("arguments[0].click();", driver.find_element(By.XPATH, "// [@id='defaultZoom']")) ActionChains(driver).click(driver.find_element(By.XPATH, "//*[@value='50']")).perform()
6条答案
按热度按时间kfgdxczn1#
我只是在和这件事作斗争。我设法找到了对我有用的东西,希望它对你也有用:
有‘Zoom%’=任何您想要的缩放级别。(例如‘67%’)
yqkkidmi2#
环境:
我尝试了过去人们在其他问题中提出的方法(没有使用css)。例如,此问题中的答案:Selenium webdriver zoom in/out page content。
或者这个:Test zoom levels of page on browsers
但没有成功。
所以,我想:如果没有捷径,还有什么不同的方式可以做到这一点呢?
我们的想法是使用“Chrome://设置/”页面来更改缩放:
好的,我知道,例如从Going through Chrome://settings by Selenium,每个设置都应该在ChromeOptions中设置。
从this question我注意到,在list of preferences中,唯一的参数(我认为)可能是:
我试过了,但没有成功。
我想重复一遍,我知道这不是正确的方法(不同的浏览器版本会有所不同),但它是有效的,至少对我理解如何进入带有 selenium 的影子根元素很有用。
以下方法返回影子根内的元素:
它很有用,因为在
chrome://settings/
页面中有影子根元素。为了在我的浏览器中做到这一点,路径如下:
最后是:
完整的代码:
编辑
正如@Florent B在评论中所建议的那样,我们可以通过以下简单操作获得相同的结果:
3qpi33ja3#
火狐为我提供解决方案,
Zoom body browser
Zoom是非标准属性,请改用Transform(演示):
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";')
oknwwptz4#
可以,您可以调用Chrome驱动程序进行缩放,而不必使用css。Chrome DevTools协议查看器中包含了一些方法,其中一个是
Input.synthesizePinchGesture
,也就是放大/缩小。为了便于使用,关于DevTools协议接口,我们将使用一个名为
MyChromeDriver
的类和webdriver.Chrome
作为元类,并使用一个新的方法将这些命令发送到Chrome:1.设置我们的WebDriver和
get
某个页面:2.通过我们的新方法
send_cmd
向Chrome发送Input.synthesizePinchGesture
命令及其参数:3.沃拉!Chrome的缩放被调用:
另外,还有很多其他命令可以与
send_cmd
一起使用。点击此处:https://chromedevtools.github.io/devtools-protocol/基于这个答案:用含 selenium 的Chrome截取全页屏幕
p3rjfoxz5#
正如您提到的
Need it to work in Chrome. The current solutions are only for Firefox
,以下是一些更新和选项:1.缩放css:
这个选择对我来说确实奏效了。但它缩放的是css,而不是Chrome浏览器。所以,你可能没有看到这一点。
1.放大和缩小Chrome浏览器:
在
4131
、4133
和1621
之后,fullscreen()
模式通过Selify-Java客户端支持到Zoom In
,但还没有公开发布到PyPI。我可以看到它是执行的,但不是推送的。
Selenium 3.7 (Python)
即将面世。同步版本号的推送将包括这一点。1.配置
webdriver
打开浏览器:如果您的需求是在
Full Screen
模式下执行Test Suite
,您可以始终使用**Options
类,并使用--kiosk
**参数配置WebDriver示例,如下所示:vc9ivgsu6#