Ruby/Selenium 访问雅虎财经报价查找字段

Ruby/Selenium access Yahoo Finance Quote Lookup field

我正在尝试使用 Ruby 和 Selenium 从 Yahoo Finance 网站抓取信息。

我需要在页面上找到 Quote Lookup 输入字段并将它发送一些值,如 TWTR,例如 open/access 有关 Twitter 公司的信息。

这是我的,但我收到错误:

代码:

require 'selenium-webdriver'
require 'byebug'

target_asset = 'TWTR'
url = 'https://finance.yahoo.com/'

driver = Selenium::WebDriver.for :chrome
begin
  driver.get url

  sleep rand(2..4)

  input_element = driver.find_element(class: 'D(ib) Pstart(10px) Bxz(bb) Bgc($lv3BgColor) W(100%) H(32px) Lh(32px) Bdrs(0) Bxsh(n) Fz(s) Bg(n) Bd O(n):f O(n):h Bdc($seperatorColor) Bdc($linkColor):f finsrch-inpt').send_keys target_asset, :return


ensure
  driver.quit
end

但这是我得到的错误:

目标框架分离(Selenium::WebDriver::Error::WebDriverError)

(会话信息:chrome=100.0.4896.127)

你必须形成更好的定位器,它适用于以下定位器。试试看。您不需要任何睡眠语句,因为程序会自动等待页面加载。如果你还想使用等待,你可以等待隐式等待或显式等待。

编写如下代码,效果很好。

require 'selenium-webdriver'

target_asset = 'TWTR'
url = 'https://finance.yahoo.com/'
driver = Selenium::WebDriver.for :chrome
begin
  driver.get url
  driver.find_element(css: "input[placeholder='Quote Lookup']").send_keys target_asset, :return
  wait = Selenium::WebDriver::Wait.new(timeout: 30) # seconds
  wait.until { !driver.find_element(xpath: "//td[@data-test='MARKET_CAP-value']").text.empty? }
  p driver.find_element(xpath: "//td[@data-test='MARKET_CAP-value']").text
ensure
  driver.quit
end