我想写的是抓取从加载的页面所有链接,并记录所有请求和响应头,在一些文件响应身体沿说,XML或TXT履带。 我打开在新的浏览器窗口中第一次加载页面的所有链接,所以我不会得到这个错误:
Element not found in the cache - perhaps the page has changed since it was looked up
我想知道什么可以替代的方式来发出请求和接收的所有环节响应,然后找到输入元素,并提交按钮,形成所有打开的窗口。 我能上面做一定程度的时候,除了打开的窗口中有常见的部位searh像一个在此框http://www.testfire.net在右上角。 我想要做的就是我想省略这种共同的框,以便我可以使用填充值其他输入i.send_keys "value"
的webdriver的方法,并没有得到这个错误ERROR:元素在缓存中没有发现-也许是页面有更改,因为它被抬起头来。
什么是检测和区分输入标签从每个打开的窗口,使价值没有得到重复的出现在网站的最常见的网页输入标签填充的方式。 我的代码如下:
require 'rubygems'
require 'selenium-webdriver'
require 'timeout'
class Clicker
def open_new_window(url)
@driver = Selenium::WebDriver.for :firefox
@url = @driver.get " http://test.acunetix.com "
@link = Array.new(@driver.find_elements(:tag_name, "a"))
@windows = Array.new(@driver.window_handles())
@link.each do |a|
a = @driver.execute_script("var d=document,a=d.createElement('a');a.target='_blank';a.href=arguments[0];a.innerHTML='.';d.body.appendChild(a);return a", a)
a.click
end
i = @driver.window_handles
i[0..i.length].each do |handle|
@driver.switch_to().window(handle)
puts @driver.current_url()
inputs = Array.new(@driver.find_elements(:tag_name, 'input'))
forms = Array.new(@driver.find_elements(:tag_name, 'form'))
inputs.each do |i|
begin
i.send_keys "value"
puts i.class
i.submit
rescue Timeout::Error => exc
puts "ERROR: #{exc.message}"
rescue Errno::ETIMEDOUT => exc
puts "ERROR: #{exc.message}"
rescue Exception => exc
puts "ERROR: #{exc.message}"
end
end
forms.each do |j|
begin
j.send_keys "value"
j.submit
rescue Timeout::Error => exc
puts "ERROR: #{exc.message}"
rescue Errno::ETIMEDOUT => exc
puts "ERROR: #{exc.message}"
rescue Exception => exc
puts "ERROR: #{exc.message}"
end
end
end
#Switch back to the original window
@driver.switch_to().window(i[0])
end
end
ol = Clicker.new
url = ""
ol.open_new_window(url)
指导我怎样才能得到使用硒的webdriver或使用与响应主体所有requeat和响应头http.set_debug_output
红宝石的的net/http
?