使用Python中的Selenium Webdriver下载图像

时间:2018-03-28 09:17:02

标签: python selenium selenium-webdriver

我正在尝试使用Python中的Selenium Webdriver从URL下载图像。该站点受登录页面保护,因此不能仅使用请求保存URL内容。我可以在登录后从网站上获取文本,但我无法弄清楚如何保存图像。

登录网站后,我可以执行browser.save_screenshot(filename + '.png'),但该图片的尺寸与原始尺寸不符。

我现在的代码是:

browser = webdriver.Chrome('../chromedriver')
browser.get('www.example.com/login')
# send username and password, click submit

browser.get('www.example.com/123')
html = browser.page_source
printData(html)

# this url is an image file
browser.get('www.example.com/get_photo.php?id=123')
browser.save_screenshot(filename + '.png')

理想情况下,我想用{/ p>之类的内容替换save_screenshot()

with open(filename + '.jpeg', 'w') as img:
    image.write(browser.download_current_image())

甚至是类似的东西,与弹出菜单进行交互

browser.right_click()
browser.down_arrow_key()
browser.return_key()

或模拟按键

browser.command_key()
browser.s_key()

This问题给出了我想要的答案,但不是Python。如果有办法在Python中执行该问题中建议的任何事情(除了截取屏幕截图),那将是一个很好的解决方案。

1 个答案:

答案 0 :(得分:1)

以下是我用登录页面后面的URL下载图像的方法,方法是使用Selenium Webdriver登录,然后将cookie传递给保存图像的请求:

headers = {
"User-Agent":
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36"
}
s = requests.session()
s.headers.update(headers)

for cookie in browser.get_cookies():
    c = {cookie['name']: cookie['value']}
    s.cookies.update(c)

r = s.get(imgurl, allow_redirects=True)
open(filename + '.jpeg', 'wb').write(r.content)

感谢AldoSuwandi向我展示如何在this帖子中执行此操作。我还使用this网站来帮助我弄清楚如何使用请求下载图像。