用selenium&保存图像火狐

时间:2009-05-03 09:51:08

标签: python selenium

我正在尝试使用selenium服务器和网站从网站保存图像。 python客户端。 我知道图片的URL,但是我无法找到保存它的代码,无论是文档本身还是嵌入当前浏览器会话。

到目前为止我发现的解决方法是保存页面的截图(有2种硒方法可以做到这一点),但我想要原始图像。

我不介意摆弄点击菜单选项等,但我找不到如何。

感谢

5 个答案:

答案 0 :(得分:5)

我找到了将图像放入画布的代码,然后将其转换为数据 - 然后可以对其进行base64编码。我的想法是在selenium中使用eval命令调用它,但在我的测试中,toDataURL抛出了一个安全错误1000.如果不是因为该错误,它似乎非常接近解决方案。

var data, canvas, ctx;
var img = new Image();
img = document.getElementById("yourimageID");
canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);  // everything works up to here
data = canvas.toDataURL();  // this fails ***
var base64Img = data.replace(/^data:image\/(png|jpg);base64,/, "");

进行一些研究我发现当图像来自不同的域时,不允许使用toDataURL。但是,我甚至通过保存页面来尝试此代码,除了图像本身和此脚本之外,还剥离了所有内容。

例如(index.html):

<html><head></head><body>
<img src="local/hard/disk/img.jpg" id="yourimageID">
<script>
// script from above
</script>
</body></html>

img.jpg和index.html存储在本地,在本地打开firefox页面,仍然出现1000安全错误!

答案 1 :(得分:3)

要以您希望的方式执行此操作(实际捕获发送到浏览器的内容),您需要修改Selenium RC的代理代码(请参阅ProxyHandler.java)并将文件本地存储在磁盘上并行发送回复浏览器的响应。

答案 2 :(得分:2)

我试图完成相同的任务,但我想要抓取的图像是我的显示器(壁纸)的大小 - 所以捕获截图解决方法对我不起作用。我想出了办法......

我已经设置了selenium去我想要的页面(这会导致所有会话的好东西) 然后我使用了一个名为“工作区宏”的程序来遍历selenium任务。

从这里抓取http://www.tethyssolutions.com/product.htm - 他们有一个试用版,我认为可以运行30次或者其他。

所以这是进展:

  • 启动firefox
  • 打开硒和负载测试用例
  • 启动它,但很快就暂停了。
  • 录制一个宏,在selenium上按“step”,然后转到firefox窗口并点击file-&gt;保存页面,保存,然后停止录制
  • 运行宏x次......
  • 利润??

干杯

答案 3 :(得分:0)

我没有使用过selenium,但如果您知道图片的网址,为什么不这样做呢:

from urllib import urlretrieve

urlretrieve(url, filename)

将url保存到文件名。 更多信息here

答案 4 :(得分:-1)

如何转到图片网址,然后截取该页面的屏幕截图? Firefox以全屏显示图像。希望这会有所帮助..