拍摄特定元素的屏幕截图(python chromedriver硒)

时间:2020-04-04 19:09:54

标签: python selenium-webdriver selenium-chromedriver

在我的下面的代码中,对特定元素的屏幕截图进行命名时遇到了问题。该页面加载,导航到第一篇文章并截图。屏幕快照已被获取,但不是我指定的元素“ article”的特定内容。下面提供了一些可测试的代码。


from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC

from selenium import webdriver



class bot:



    def __init__(self):

        self.driver = webdriver.Chrome("path here")



    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)





    def nextPostPhoto(self):

        driver = self.driver

        driver.get("https://www.instagram.com/zuck/")

        element= 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]")))

        driver.execute_script("arguments[0].click()", element)

        article = driver.find_elements_by_xpath('//div[@role="dialog" or @id="react-root"]//article')[-1]

        screenshot_as_bytes = article.screenshot_as_png

        with open('article.png', 'wb') as f:

            f.write(screenshot_as_bytes)



if __name__ == "__main__":

    bot = bot()

    bot.change_zoom(80)

    bot.nextPostPhoto()

我当前拍摄的屏幕快照要么是post + comments块的一部分,要么是网页中不是post + comments块的部分。我只想截取“文章”的屏幕截图。

1 个答案:

答案 0 :(得分:0)

根本原因是您将缩放级别设置为80%,而硒不知道这一事实。如果从相关页面(手动)创建屏幕截图(以80%的比例缩放),则可以看到目标区域的大小约为747x481像素。如果检查元素对自身的看法(print(article.rect)),那么您会发现硒并不知道缩放的变化。

所以屏幕截图偏移的原因是缩放级别。如果这是硒错误,我不能告诉。如果您将缩放级别保持在100%,则屏幕截图将照常创建。

或者您可以从屏幕上创建屏幕截图,计算偏移的尺寸并裁剪所需的区域并保存。那基本上是