单击所有链接并使用Selenium Ruby在新选项卡中打开所有单击的链接

单击所有链接并使用Selenium Ruby在新选项卡中打开所有单击的链接,ruby,selenium,hyperlink,click,anchor,Ruby,Selenium,Hyperlink,Click,Anchor,我想使用driver.get”在我加载的页面的新浏览器选项卡中打开所有单击的链接http://www.example.com“。我在以前问过的另一个问题中得到了答案,但它并没有像我预期的那样起作用。 代码如下: require 'rubygems' require 'selenium-webdriver' driver = Selenium::WebDriver.for :firefox driver.get " http://www.testfire.net " driver.find_e

我想使用
driver.get”在我加载的页面的新浏览器选项卡中打开所有单击的链接http://www.example.com“
。我在以前问过的另一个问题中得到了答案,但它并没有像我预期的那样起作用。 代码如下:

require 'rubygems'
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.get " http://www.testfire.net "

driver.find_elements(:tag_name, "a").each {|link| link.click }

运行此代码后,Selenium Web驱动程序打开Firefox,加载请求的页面并单击它找到的第一个锚定标记,然后出错崩溃

我也尝试过这个
驱动程序。查找元素(:tag\u name,“a”)。发送键[:control,'t']
这个可以打开新选项卡,但不加载页面,空白选项卡

我如何安排这个循环,这样我就不会出错,并且第一个加载页面上的所有单击链接都将在单独的浏览器选项卡中打开

我是否需要使用
等待
,才能使其工作

[remote server] resource://fxdriver/modules/web_element_cache.js:9500:in `unknown': Element not found in the cache - perhaps the page has changed since it was looked up (Selenium::WebDriver::Error::StaleElementReferenceError)
        from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/fxdriver@googlecode.com/components/command_processor.js:9069:in `unknown'
        from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/fxdriver@googlecode.com/components/command_processor.js:9504:in `unknown'
        from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/fxdriver@googlecode.com/components/command_processor.js:10510:in `unknown'
        from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/fxdriver@googlecode.com/components/command_processor.js:10529:in `unknown'
        from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/fxdriver@googlecode.com/components/command_processor.js:10534:in `unknown'
        from [remote server] file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-profile20120427-1496-sev0j4/extensions/fxdriver@googlecode.com/components/command_processor.js:10482:in `unknown'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/common.rb:59:in `new'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/common.rb:59:in `create_response'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/default.rb:64:in `request'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/bridge.rb:594:in `raw_execute'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/bridge.rb:572:in `execute'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/bridge.rb:354:in `clickElement'
        from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/common/element.rb:34:in `click'
        from selclick.rb:6:in `block in <main>'
        from selclick.rb:5:in `each'
        from selclick.rb:5:in `<main>'
[远程服务器]resource://fxdriver/modules/web_element_cache.js:9500:in `未知“:缓存中找不到元素-可能该页在查找后已更改(Selenium::WebDriver::Error::StaleElementReferenceError)
来自[远程服务器]file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-档案20120427-1496-sev0j4/扩展/fxdriver@googlecode.com/components/command_processor.js:9069:in'unknown'
来自[远程服务器]file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-档案20120427-1496-sev0j4/扩展/fxdriver@googlecode.com/components/command_processor.js:9504:in'unknown'
来自[远程服务器]file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-档案20120427-1496-sev0j4/扩展/fxdriver@googlecode.com/components/command_processor.js:10510:in'unknown'
来自[远程服务器]file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-档案20120427-1496-sev0j4/扩展/fxdriver@googlecode.com/components/command_processor.js:10529:in'unknown'
来自[远程服务器]file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-档案20120427-1496-sev0j4/扩展/fxdriver@googlecode.com/components/command_processor.js:10534:in'unknown'
来自[远程服务器]file:///C:/Users/AKASH/AppData/Local/Temp/webdriver-档案20120427-1496-sev0j4/扩展/fxdriver@googlecode.com/components/command_processor.js:10482:in'unknown'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/response.rb:52:in'assert_ok'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/response.rb:15:in'initialize'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/common.rb:59:in'new'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/common.rb:59:in“create_response”
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/default.rb:64:in'request'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/http/common.rb:40:in'call'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/bridge.rb:594:in'raw_execute'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/bridge.rb:572:in'execute'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/remote/bridge.rb:354:in'clickElement'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.20.0/lib/selenium/webdriver/common/element.rb:34:in'click'
从selclick.rb:6:in'block in'
从selclick.rb:5:in'each'
从selclick.rb:5:in`'
我相信这是“按预期工作”

循环的第一次迭代工作正常,之后每次迭代都失败。错误恰恰说明了原因。由于页面已重新加载,对象引用不再指向正确的链接

我不确定这是否清楚,所以让我们来看看到底发生了什么

您可以访问您的页面。所有链接都收集在数组中。在循环的第一次迭代中,单击第一个链接。您访问的是同一页面的链接。你不再在以前的页面上了。循环的第二次迭代查找上一页的链接。它不再存在,因为你在下一页。因此,这是一个错误

你到底想做什么?您是否尝试访问网站上的每个页面

如果您试图对网站进行爬网,我可以推荐Mechanize或Anemone吗?

Java

List<WebElement> elements = driver.find_elements( _locator_ );
for (i=0; i<elements.size(); i++) {
    List<WebElement> elements2 =driver.find_elements(_locator_) 

    WebElement ele = elements2.get(i);

    ele.click();
}
List elements=driver.find_元素(_locator);

对于(i=0;i“加载请求的页面并单击它找到的第一个锚定标记,然后错误崩溃。”您遇到的错误是什么?已更新的问题,错误代码为否我想单击第一页上的所有链接我加载了,并考虑从此加载的页面打开新浏览器选项卡中的所有链接。我尝试了
发送\u键
,并想在循环中首先按tab键以逐页关注链接,然后组合Ctrl+Enter打开此链接新选项卡中的焦点链接。我认为这是使用此Selenium RubyI打开加载页面中所有链接的方法。我不认为使用Selenium是可能的。请参阅:使用javascript可能有一个解决方法,如下所述: