Ruby/Selenium Access Yahoo Finance报价查找场

发布于 2025-01-21 18:58:08 字数 760 浏览 0 评论 0原文

我正在尝试使用Ruby和Selenium从Yahoo Finance网站上搜索信息。

我需要在页面上找到报价查找输入字段,并将其发送一些值,例如TWTR,以打开有关Twitter Company的信息。

这是我拥有的,但是我会收到错误:

代码:

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.0.4896.127)

I am trying to scrape information from Yahoo Finance website using Ruby and Selenium.

I need to locate Quote Lookup input field on the page and send it some value, like TWTR, to open/access information about Twitter company, for example.

This is what I have, but I receive error:

Code:

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

But this is the error I get:

target frame detached (Selenium::WebDriver::Error::WebDriverError)

(Session info: chrome=100.0.4896.127)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如梦亦如幻 2025-01-28 18:58:08

您必须形成更好的定位器,对我有以下定位器对我有用。尝试一下。您不需要任何睡眠声明,因为程序会自动等待页面加载。如果您仍然想使用等待,则可以等待隐式等待或明确等待。

编写以下代码,它可以正常工作。

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

You must form the better locator, It works for me with the following locator. Try it out. You don't need any sleep statement because program automatically waits for page load. If you still want to use wait, you could wait implicit wait or explicit wait.

Write the following code, it works fine.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文