さんだすメモ

さメモ

技術ブログでは、ない・・・

  らぶ画像

DOWNLOADの携帯用ページを順に見ていく(その他は省略)。練習用にselenium-driverを利用した。

準備

  • selenium-webdriver
  • webdriver-user-agent
  • geckodriver をインストールする

手順

ログインする

require 'selenium-webdriver'
require 'webdriver-user-agent'

# User-AgentをiPhoneにして使う
driver = Webdriver::UserAgent.driver(:browser => :firefox, :agent => :iphone)

# タイムアウトの時間設定
driver.manage.timeouts.page_load = 30

# ログインページを開く
driver.navigate.to "https://.........com/login_......html"

# フォームに入力
input_mailtel = driver.find_element(:xpath, "//input[contains(@name,'userno')]")
input_mailtel.send_keys(userno)

# フォームに入力
input_password = driver.find_element(:xpath, "//input[contains(@name,'password')]")
input_password.send_keys(password)

# クリックして送る
login_button = driver.find_element(:xpath, "//input[contains(@value,'ログイン')]")
login_button.click()

順番に画像を見る

# DOWNLOADのページ
driver.get("https://.........com/contents/......./sp/download/index.html")

# 各月のページのリンクを探す
driver.find_elementss(:xpath, "//section[contains(@class,'maincontents')]//li//a").each do |element|

  # 各月のページのurlを持っておく
  url = element.attribute('href')

  # 新しいウィンドウを開く
  driver.execute_script("window.open()")

  # 新しいウィンドウのハンドルが得られるまで待つ
  Selenium::WebDriver::Wait.new(:timeout => 10).until {
    driver.window_handles.length == 2
  }

  # 元と新規のハンドルを持っておく
  window_handles = driver.window_handles

  # フォーカスを移動
  driver.switch_to.window(window_handles[1])

  # ロードを待つ時間を設定:不要?
  driver.manage.timeouts.page_load = 30

  # 詳細のページに移動
  driver.get(url)

  # iPhone 6やAndroid用の画像があるので、それぞれのリンクを得る
  driver.find_elements(:xpath, "//section[contains(@class,'maincontents')]//li//a").each do |element_wp|
    # 何らかの処理
  end

  # 新しいウィンドウを閉じる
  driver.close

  # 元のウィンドウにフォーカスを戻す
  driver.switch_to.window(window_handles[0])
end

補足

driver.action.key_down(:control).click(element).key_up(:control).performで新しいタブで開けるが、ロードの待ち方がわからなかったので、新規ウィンドウを開くようにした。ウィンドウをくっつけたいとは思うけど必要ないので放置。
iPhone 6 Plusが一番高画質っぽい。