我们可以在 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 回答。

原文由 Dayananda 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

我只是在为此苦苦挣扎。我设法找到了适合我的东西,希望它对你有用:

 driver.execute_script("document.body.style.zoom='zoom %'")

有’zoom%’ = 你想要的任何缩放级别。 (例如“67%”)

原文由 Ben 发布,翻译遵循 CC BY-SA 3.0 许可协议

环境:

  • 硒 3.6.0
  • 镀铬驱动程序 2.33
  • Chrome 版本 62.0.3202.75(正式版)(64 位)
  • macOS 塞拉利昂 10.12.6

我尝试了人们过去在其他问题中建议的方法(不使用 CSS)。例如,这个问题的答案: Selenium webdriver zoom in/out page content

或者这个: 在浏览器上测试页面的缩放级别

没有成功。

所以,我想:如果没有捷径,还有什么不同的方法可以做到这一点?

这个想法是使用“chrome://settings/”页面来改变缩放:

在此处输入图像描述

好的,我知道,例如 通过 Selenium 的 Going through Chrome://settings ,每个设置都应该在 ChromeOptions 中设置。

这个问题 中,我注意到在 首选项列表中,唯一的参数(我认为)可能是:

 // 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/ 页面中有影子根元素。

为了在我的浏览器中执行此操作,这是路径:

 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/")

在此处输入图像描述

原文由 Davide Patti 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题