質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Java

    15810questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • C#

    9031questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • VB.NET

    1055questions

    Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

  • selenium

    702questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

  • Firefox

    241questions

    Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

seleniumで、右クリックから名前を付けて保存がしたい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,914

ky_46

score 82

前提・実現したいこと

tagにC#とJavaを入れさせて頂きましたが、開発はVB2015で行っています。
サイト上にある画像データが正しいかどうかチェックするため、総当たりで画像をダウンロードしたいです。
これだけなら、Irvineなど画像ダウンロード用のフリーソフトがあるのですが、ちょっと特殊な環境で、上手く動作しません。
このため、seleniumが使用できないかと考えています。

発生している問題・エラーメッセージ

http://item.shopping.c.yimg.jp/i/j/b-japan_pe0001

掲載の許可を貰ったサイトですが、上記のように、URLが画像を指していません。
画像を示しているのは、「b-japan_pe0001」の部分で、このリストはデータベースとして取得できます。

実際、上記サイトにブラウザで行き、右クリックして、名前を付けて画像を保存 すると、b-japan_pe0001.jpg が保存されます。

という事は、データベースで得たURLをseleniumに与え、画像上で右クリックして保存を繰り返せば、全画像がダウンロードできそうです。

該当のソースコード

Dim url1 As String = "http://item.shopping.c.yimg.jp/i/j/"

        Dim profile As New Firefox.FirefoxProfile("C:\Users\shop\AppData\Roaming\Mozilla\Firefox\Profiles\[プロファイル]")
        driver = New OpenQA.Selenium.Firefox.FirefoxDriver(profile)


        ''データベースと接続
        Call sql_st()

        Dim sql1 As String = "SELECT [b-japan_pe0001などの一覧が入ったデータベースに接続するSQL];"

        Dim dTb1 As DataTable = sql_result_return(sql1)
        If dTb1.Rows.Count = 0 Then
            ' レコード取得できず⇒トラブル
            Dim mr0 As Integer
            mr0 = MsgBox("データが見つかりません", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, "確認")

        Else
            For Each DRow1 As DataRow In dTb1.Rows

                Dim pid As String = DRow1.Item(0).ToString.ToLower

                Dim url As String = url1 & pid
                driver.Navigate().GoToUrl(url)


            Next
        End If

        ''データベースを切断


このプログラムを動かすと、指定プロファイルでFirefoxが立ち上がり、画像データ部分をデータベースから取得してURLを生成。該当URLに接続するところまではうまくいきました。

試したこと

googleなど色々調べてみましたが、右クリックを発生させる方法が見つけられません。
Firefoxにseleniumのプラグインを導入して、画像の上で右クリックをしてみましたが、コードが発生しませんでした。

右クリックを発生させて、ファイルを保存する方法はないでしょうか?

或いは、発生したURLを「名前を付けてページを保存」でもb-japan_pe0001.jpg が保存されますので、どちらかを発生させる事ができたらと思います。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

今回については、googleで探していたところ、WebClient()でダウンロード出来そうな記事を見つけ、次のようにしてみました。

Dim url1 As String = "http://item.shopping.c.yimg.jp/i/j/"


        ''データベースと接続

        Dim sql1 As String = "SELECT [b-japan_pe0001などの一覧が入ったデータベースに接続するSQL];"

        Dim dTb1 As DataTable = sql_result_return(sql1)
        If dTb1.Rows.Count = 0 Then
            ' レコード取得できず⇒トラブル
            Dim mr0 As Integer
            mr0 = MsgBox("データが見つかりません", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, "確認")

        Else
            For Each DRow1 As DataRow In dTb1.Rows
              Dim url As String = [SELECTの結果]
              Dim fn1 As String = pid & ".jpg"'<結果に.jpgを付与してファイル名にしている

              Dim wc As New System.Net.WebClient()
              wc.DownloadFile(url, fn1)

            Next
        End If

        ''データベースを切断

画像の拡張子を含まないURLを与え、それに拡張子を付けたものをダウンロード名として割り当てたところ、画像をダウンロードできました。

ただ、Yahoo!ショッピングのこの画像参照ページは、HTMLとしての行儀が悪いのか、
「サーバーによってプロトコル違反が発生しました. Section=ResponseHeader Detail=CR の後には LF を指定しなければなりません」

のエラーが頻発しました。

<configuration>
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing = "true" />
</settings>
</system.net>
</configuration>

をapp.configとして保存してからコンパイルして、とりあえずダウンロードできるようになりました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

VBAは不慣れですが、URLの文字列が取得できるならば、次のサイトに書いてあるような方法でダウンロードできませんか?
https://www.ka-net.org/blog/?p=4855

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/17 16:23

    ありがとうございます。

    申し訳ないのですが、VBAではなく、VB.NETでプログラムを作成しています。
    今回頂いたご回答は、VBAでファイルをダウンロードする必要があったとき、活用させていただきます。

    キャンセル

同じタグがついた質問を見る

  • Java

    15810questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • C#

    9031questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • VB.NET

    1055questions

    Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

  • selenium

    702questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

  • Firefox

    241questions

    Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ