尝试在Google上设置缩放出现问题 (chromedriver,selenium,python)

4

我正在尝试将 Google Chrome 的缩放比例设置为 80%。


from selenium import webdriver

class bot:

    def __init__(self):
        self.driver = webdriver.Chrome("chromedriver path here")

    def zoomOut(self):
        driver = self.driver
        driver.get('chrome://settings/')
        driver.find_element_by_xpath('//*[@id="zoomLevel"]').sendKeys('80').sendKeys(Keys.ENTER)

if __name__ == "__main__":
    bot = bot()
    bot.zoomOut()

希望能得到在如何解决这个问题方面的任何帮助。

更新:我在查找xpath以设置缩放值时遇到错误。


这个回答解决了你的问题吗?如何使用Python Selenium缩小页面 - Yaakov Bressler
我也尝试了那些方法,但对我无效。我还尝试了:driver.execute_script("document.body.style.zoom='zoom %'") - A D
你是否遇到了错误? - Robert Kearns
在我的问题尝试中,当我尝试通过xpath查找来设置缩放值时,出现了错误。当我尝试使用另一个在stackoverflow上建议的方法:driver.execute_script("document.body.style.zoom='zoom %'")时,缩放值没有发生任何变化。 - A D
1个回答

2

这是一个有趣的问题。由于设置元素非常嵌套在一堆影子根(类似于 iFrame 的“子 dom”)中,因此这很困难。它被深度嵌套,并且有点麻烦。以下是一些 JS 代码,可以帮助我们到达那里:

var selectBox = document.querySelector("settings-ui").shadowRoot.querySelector("#main").shadowRoot.querySelector("settings-basic-page").shadowRoot.querySelector("settings-appearance-page").shadowRoot.querySelector("#zoomLevel");

var changeEvent = new Event("change");

selectBox.value = arguments[0];
selectBox.dispatchEvent(changeEvent); // Trigger change event to change the zoom

我们可以将此放入Python方法中以更改缩放比例。
class Bot:
    def change_zoom(self, new_zoom):
        """
        :param new_zoom: zoom level as a percentage
        """
        change_js = """
        var selectBox = document.querySelector("settings-ui").shadowRoot.querySelector("#main").shadowRoot.querySelector("settings-basic-page").shadowRoot.querySelector("settings-appearance-page").shadowRoot.querySelector("#zoomLevel");

        var changeEvent = new Event("change");

        selectBox.value = arguments[0];
        selectBox.dispatchEvent(changeEvent);
        """

        self.driver.get("chrome://settings/")
        new_zoom = round(new_zoom / 100, 2)
        self.driver.execute_script(change_js, new_zoom)

我非常确定有一种更简单的方法来访问这些深度嵌套的元素,但这对我来说很有效。


非常感谢您的帮助和解释。使用此缩放方法后,我的其余网络爬虫代码似乎无法按预期运行。具体来说,当我不调用缩放方法时,无法找到使用xpath找到的元素。有什么想法吗? - A D
1
很难说,特别是如果您的xPath不够详细(非常具体)。更改页面的缩放可能会触发一些处理程序,从而改变页面的结构。您的xPath是什么样子的?它们通常很长吗? - Robert Kearns
以下是我的代码部分示例,用于导航到Instagram个人资料并点击第一篇帖子: driver.get("https://www.instagram.com/zuck/") time.sleep(2) WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//body//div[contains(@class,'_2z6nI')]//div//div//div[1]//div[1]//a[1]//div[1]//div[2]"))).click() 抱歉这看起来有些混乱,但是确实有些xpath非常长。 - A D
1
哦,是的,那非常脆弱。只要页面结构稍微改变一下,你整个查询就会崩溃。目标元素长什么样? - Robert Kearns
如果你导航到“instagram.com/zuck/”,则目标元素是最新的帖子。 - A D
1
article img[srcset]会返回所有帖子图片列表(这是一个CSS选择器)。这比使用xPath更加灵活。 - Robert Kearns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接