我正在嘗試編寫一個爬網程序,用於從加載的頁面中檢索所有鏈接,並在某些文件中記錄所有請求和響應頭以及響應正文,如XML或txt。我打開在新的瀏覽器窗口中第一次加載頁面的所有鏈接,所以我不會得到這個錯誤:在緩存中找不到元素 - 可能該頁面在Selenium Ruby Web驅動程序中查找後發生了變化?
Element not found in the cache - perhaps the page has changed since it was looked up
我想知道什麼可以做的請求,並接收來自各環節響應,然後找到輸入的另一種方法元素和提交按鈕形成所有打開的窗口。 除了打開的窗口在右上角有http://www.testfire.net這樣的常見網站搜索框之外,我可以在一定程度上做到這一點。 我想要做的是我想省略這些常見的框,以便我可以使用i.send_keys "value"
webdriver方法填充其他輸入值,並且不會出現此錯誤 錯誤:元素未在緩存中找到 - 可能頁面已更改,因爲它被擡起頭。
從每個打開的窗口中檢測和區分輸入標籤的方法是什麼,以便在大多數網站頁面上出現的常用輸入標籤中不會重複填充值。 我的代碼如下:
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或使用Ruby的net/http
的http.set_debug_output
與響應主體所有requeat和響應頭?