【问题标题】:Save image through browser with selenium in python在python中使用硒通过浏览器保存图像
【发布时间】:2021-01-19 17:39:27
【问题描述】:

我看过类似的问题,他们都建议使用 urllib/requests 或截图。

使用 urllib/requests 下载图像会呈现不同的用户代理,并且我的会话 cookie 不附带。截屏会将分辨率限制为屏幕上显示的内容。

有没有办法基本上右键单击并“复制图像”,这样我就可以将图像保存到文件中,而无需重新下载图像或调整屏幕上显示的比例?

Edit:

JavaScript simulate right click through code 是该线程中最接近合法答案的东西,建议这是重复的。但是,它是 javascript,而不是 python。

屏幕截图答案似乎是事实上的解决方案,但不符合我的需求,因为我尝试捕获的图像的分辨率高于它被缩放以包含的屏幕区域。

我在谷歌图像搜索结果中使用了 element.screenshot_as_png 技术,“另存为”返回的分辨率为 2932x718 的图像变成了尺寸为 433x106 的裁剪屏幕截图。我想要完整分辨率的图像而无需再次下载(我承认“另存为”确实如此)。

因为我可以“复制图像”而无需再次下载图像,我应该能够通过 selenium 做一些事情(最好不需要我学习 javascript)。也许这可以用 selenium-wire(?) 来完成,尽管我希望尽可能少的依赖。

【问题讨论】:

标签: python selenium firefox webdriver


【解决方案1】:

它相当不雅,但在功能上符合我的要求:

#once you've found the src of the image
driver.get("about:cache?storage=disk") #navigate to Firefox cache
#find the cache for your file
driver.find_element_by_link_text("src/url/of/image.png").click() 
cache_data=driver.find_element_by_xpath("/html/body/pre")
#parse the hex code into bytes
data=cache_data.text
temp=data.split("\n")
data0=[]
for line in temp:
    data0+=line.split("  ")[1:17]
data1=[]
for char in data0:
    try:
        data1+=[int(char,16)]
    except:
        pass

data2=bytes(data1)
#save to file
with open(r"c\:filepath.png","wb") as file:
        file.write(data2)

【讨论】:

    【解决方案2】:

    这是一个windows解决方案,可以右键单击并向下8点复制图像。

    import win32com.client as comclt
    from time import sleep
    wsh= comclt.Dispatch("WScript.Shell")
    ActionChains(driver).move_to_element(img).context_click().perform()
    for i in range(8):
        wsh.SendKeys("{DOWN}")
        time.sleep(1)
    wsh.SendKeys("{ENTER}")
    

    【讨论】:

    • 感谢您的回答,但无法使其正常工作。 stackoverflow.com/questions/45789188/… 此线程似乎表明您无法将_keys 发送到上下文菜单。我尝试了 key_down 和 key_up,希望它可能会有所不同,但情况似乎并非如此。
    • @SelfTaughtProgrammer 你不能使用 selenium 来做,但我认为 pyautogui 甚至这可以复制图像。
    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多