0

我想通过右键单击和 alt+y 复制页面中的图像,并且遵循代码在 firefox 中运行良好,但 chrome 和 ie。所以我无法从剪贴板中获取图像。

require 'watir-webdriver'
b = Watir::Browser.new :chrome
b.goto('www.baidu.com')
b.img(:src=>"http://www.baidu.com/img/baidu_sylogo1.gif").right_click
b.send_keys ("{alt}y")

并且遵循代码可以很好地工作

require 'watir-webdriver'
b = Watir::Browser.new :chrome
b.goto('www.baidu.com')
b.send_keys :tab

这可以很好地工作

4

4 回答 4

2

When you do b.send_keys ("{alt}y"), you are just typing the letters {, a, l, etc.

Try this instead:

b.send_keys([:alt, 'y'])

Watir and Watir-Webdriver use different inputs for send_keys - see here.

Note: I did not test your full script with this. To be honest, I cannot figure out how to manually copy the image to clipboard using alt+y.

于 2012-04-13T16:48:33.090 回答
1

不要浪费任何时间尝试自动化验证,例如验证码(完全自动化的公共图灵测试以区分计算机和人类)或其他旨在阻止自动化的身份验证系统。是的,它可以做到,但它正在有效地参与军备竞赛或在风车上倾斜。更重要的是,它不会给你的雇主带来任何价值。

围绕验证码或验证码进行自动化的正确方法是配置测试环境,使代码可预测。许多验证码工具或验证工具能够在“测试”模式下运行,并在其中设置响应。您永远不会以这种方式配置生产环境,但您可以轻松(并且应该)以这种方式配置测试环境。

与设置和控制测试环境的人交谈。他们只需要一些逻辑来知道它是一个测试环境,然后使用适当的 api 调用验证码或授权工具(如谷歌授权器,或每 5 分钟输出一次数字的小部件)将其置于测试模式,以便它使用可预测的验证响应。

这是我在谈论的一个例子:http: //captcha.biz/doc/aspnet/api/captcha-configuration-reference.html#BotDetect.Configuration.ITestModeConfiguration

如果您使用的东西不支持这一点,那么您可以将系统配置为完全跳过验证码,或者您可以将其配置为指向您创建的一些测试存根(而不是真正的验证码系统)。这将是您或您的开发人员创建的一小段代码,它使用与真实验证码相同的 api,但始终期望得到相同的答案。在这种情况下,一切的行为都与它与真正的验证码服务交谈时完全一样,但它正在与之交谈的小存根代码总是发送具有相同“答案”的相同图像,例如“测试”

这种事情对于测试环境来说是正常的,在这些环境中,各种第三方的东西要么被禁用,要么进入测试模式,要么连接到测试沙箱(例如验证码、广告、网站分析、跟踪像素、信用卡授权服务, ETC)

于 2012-04-13T20:25:21.200 回答
1

这将有助于了解您为什么要保存图像。屏幕截图会起作用吗?如果会,试试这个:

b.driver.save_screenshot "#{Time.now.to_i}.png"
于 2012-04-13T16:05:29.793 回答
1

根据之前的评论之一,听起来您最终只需要一种保存图像的方法。我认为将其复制到剪贴板实际上并不重要。

因此,您在 Watir-Webdriver 中完成所有导航,然后切换到其他 Ruby gem 之一(例如 Open-URI 或 Net-Http)来下载图像。

以下是使用 Open-URI 的示例:

require 'watir-webdriver'
require "open-uri"

save_file = 'C:\Documents and Settings\Setup\Desktop\image.png'

b = Watir::Browser.new :chrome
b.goto('www.baidu.com')
image_location = b.img.src

File.open(save_file, 'wb') do |fo|
  fo.write open(image_location).read
end
于 2012-04-16T13:41:46.570 回答