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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Firefox

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

Java

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

selenium

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

VB.NET

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

Q&A

解決済

2回答

11740閲覧

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

ky_46

総合スコア92

C#

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

Firefox

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

Java

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

selenium

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

VB.NET

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

0グッド

0クリップ

投稿2016/08/08 07:52

###前提・実現したいこと
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に与え、画像上で右クリックして保存を繰り返せば、全画像がダウンロードできそうです。

###該当のソースコード

VB2005

1 Dim url1 As String = "http://item.shopping.c.yimg.jp/i/j/" 2 3 Dim profile As New Firefox.FirefoxProfile("C:\Users\shop\AppData\Roaming\Mozilla\Firefox\Profiles\[プロファイル]") 4 driver = New OpenQA.Selenium.Firefox.FirefoxDriver(profile) 5 6 7 ''データベースと接続 8 Call sql_st() 9 10 Dim sql1 As String = "SELECT [b-japan_pe0001などの一覧が入ったデータベースに接続するSQL];" 11 12 Dim dTb1 As DataTable = sql_result_return(sql1) 13 If dTb1.Rows.Count = 0 Then 14 ' レコード取得できず⇒トラブル 15 Dim mr0 As Integer 16 mr0 = MsgBox("データが見つかりません", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, "確認") 17 18 Else 19 For Each DRow1 As DataRow In dTb1.Rows 20 21 Dim pid As String = DRow1.Item(0).ToString.ToLower 22 23 Dim url As String = url1 & pid 24 driver.Navigate().GoToUrl(url) 25 26 27 Next 28 End If 29 30 ''データベースを切断

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

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

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

VB.NET

1Dim url1 As String = "http://item.shopping.c.yimg.jp/i/j/" 2 3 4 ''データベースと接続 5 6 Dim sql1 As String = "SELECT [b-japan_pe0001などの一覧が入ったデータベースに接続するSQL];" 7 8 Dim dTb1 As DataTable = sql_result_return(sql1) 9 If dTb1.Rows.Count = 0 Then 10 ' レコード取得できず⇒トラブル 11 Dim mr0 As Integer 12 mr0 = MsgBox("データが見つかりません", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, "確認") 13 14 Else 15 For Each DRow1 As DataRow In dTb1.Rows 16 Dim url As String = [SELECTの結果] 17 Dim fn1 As String = pid & ".jpg"'<結果に.jpgを付与してファイル名にしている 18 19 Dim wc As New System.Net.WebClient() 20 wc.DownloadFile(url, fn1) 21 22 Next 23 End If 24 25 ''データベースを切断

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

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

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

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

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

投稿2016/08/17 07:35

ky_46

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2016/08/10 17:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ky_46

2016/08/17 07:23

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問