我正在嘗試使用 Ruby 和 Selenium 從 Yahoo Finance 網站上抓取資訊。
例如,我需要在頁面上找到 Quote Lookup 輸入欄位并向其發送一些值,例如 TWTR,以打開/訪問有關 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)
uj5u.com熱心網友回復:
您必須形成更好的定位器,它適用于以下定位器。試試看。您不需要任何 sleep 陳述句,因為程式會自動等待頁面加載。如果您仍然想使用等待,您可以等待隱式等待或顯式等待。
撰寫以下代碼,它可以正常作業。
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460085.html
