Amazonのコンテンツと内容ページの全要素を取得しようとしていて詰まったので質問させて頂きます
以下の関数を使ってAmazonを下にスクロールし,HTMLから本のデータを取得
↓
「もっと表示」ボタンを押してすべて取得するまで繰り返ししようとしているのですが
「もっと表示」ボタンが見つからないと出てエラーになります
@driver.page_sourceを保存してHTMLを表示すると"contentTable_showMore_myx "はあるのですがなぜスクリプトから探すとエラーが発生するのでしょうか?
よろしくお願いします
追記:
エラーが発生するのは
element = @driver.find_element(:id,"contentTable_showMore_myx ")です
どこで詰まってるのか調べるためにあえてbeginから外しています
HTMLは長すぎて張はれないですが以下のページです
https://www.amazon.co.jp/hz/mycd/myx?ie=UTF8&openid.identity=https%3A%2F%2Fwww.amazon.co.jp%2Fap%2Fid%2Famzn1.account.AGL4O3NQKSEFFJ64ZRPPXK3J3VPQ&openid.op_endpoint=https%3A%2F%2Fwww.amazon.co.jp%2Fap%2Fsignin&openid.pape.auth_time=2019-12-16T12%3A45%3A26Z&openid.signed=assoc_handle%2Cclaimed_id%2Cidentity%2Cmode%2Cns%2Cop_endpoint%2Cresponse_nonce%2Creturn_to%2Cns.pape%2Cpape.auth_policies%2Cpape.auth_time%2Csigned&openid.return_to=https%3A%2F%2Fwww.amazon.co.jp%2Fmn%2Fdcw%2Fmyx.html%2Fref%3Dkinw_myk_redirect&openid.assoc_handle=jpamazon&serial=&openid.mode=id_res&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.auth_policies=http%3A%2F%2Fschemas.openid.net%2Fpape%2Fpolicies%2F2007%2F06%2Fnone&openid.sig=CxxhN3fbcGW5Xr1fJRdlAuqlEur3iPtVp9fo4hJwvwk%3D&openid.claimed_id=https%3A%2F%2Fwww.amazon.co.jp%2Fap%2Fid%2Famzn1.account.AGL4O3NQKSEFFJ64ZRPPXK3J3VPQ&openid.response_nonce=2019-12-16T12%3A45%3A26Z-8094027330535764390&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0#/home/content/booksAll/dateDsc/
ruby
1 def get_book_list() 2 pre = -1 3 list = [] 4 @driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 5 sleep(8) 6 #本のリストが増えなくなるまで下にスクロール 7 while (pre != list.length)do 8 pre = list.length 9 if(pre == COUNT_MAX)then 10 break 11 end 12 @driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 13 sleep(5) 14 #htmlを取得,本のリスト化 15 list = book_get Nokogiri::HTML @driver.page_source 16 end 17 #コンテンツを表示できるならもっと表示ボタンをクリック 18 if display_next then 19 list = list + get_book_list 20 end 21 return list 22 end 23 24 def display_next() 25 element = @driver.find_element(:id,"contentTable_showMore_myx ") 26 element.location_once_scrolled_into_view 27 element.click 28 begin 29 return true 30 rescue 31 return false 32 end 33 end