○○○を使う
「DOM操作でもうまくいかない」、「キーボード操作でも無理」となれば?
もう一つありますよね!キーボードとセットで存在する何でもできるアレが。
かわいい。
で、本当はこっちですね。
ということでマウスを操作するしか無いという結論に達したため、今回「SetCursorPos」と「mouse_event」を使いました。この関数を組み合わせれば任意の座標でクリックを行わせることができるため、大抵の事が行える様になります。
SetCursorPosとは
https://msdn.microsoft.com/ja-jp/library/cc428944.aspxマウスカーソル( マウスポインタ)の位置を、指定されたスクリーン座標に移動します。ただし、ClipCursor 関数によって設定された長方形よりも外側を指定すると、システムは座標を自動的に調整して、この長方形の中にとどまらせます。
mouse_eventとは
https://msdn.microsoft.com/ja-jp/library/cc410921.aspxマウスの移動やマウスボタンのクリックを合成します。
ですが、一つ問題があります。
それは「どうやってボタンのXY座標を読み取ればいいか」です。
IEのウィンドウを全画面に広げて使うこともあれば、ウィンドウモードで好きな所に配置することもありますよね。それに全画面にした所で画面の解像度によっても座標は変わります。ではどうすれば良いのか・・・
まず下の2枚の画像を見て下さい。
それぞれIEのウィンドウサイズを「幅約820px」、「幅約1260px」にした時の画像ですが、ウィンドウサイズによってこの画像編集用アプリケーションの幅も変化しているのが分かりますでしょうか。
※ウィンドウサイズを780未満位にするとアプリの幅がそれ以上縮まらずに隠れてしまうため、下限は存在します。
つまりどういうことかと言うと、IEから見た「取消」や「保存(適用)」のボタンの位置というのは常に”一定”なんです。
ということで左側にある「取消」のボタンをクリックしたいなら
「objIE.Left + 100, objIE.Top + 200」
右側の「保存(適用)」ボタンをクリックしたいなら
「objIE.Left + objIE.Width – 100, objIE.Top + 200」
といった感じで記述すれば、丁度ボタンの位置にカーソルを合わせることができます。
IEのメニューバー表示設定等の有無でY軸の座標は若干変わりますが、その辺は処理前にVBAから消してやることもできるので、ある程度統一はできると思います。どうしても微調整が必要なら調整できる仕組みを設ければいいだけですしね。
実は「保存」ボタンを押した後もこのアプリが閉じるまでに結構時間が掛かるので、待機時間をどうするのかという問題が残っていますが・・・。こちらはまた別の機会にでも書きましょう。
最後に実際に動作させた所の動画を載せておきます。
※動画内でカテゴリを設定する部分がシート上のものと異なっていますが、これは選択するカテゴリをプログラム内に直接記述しているからです。シート上の設定を参照する様にはまだしていません。
さて、いかがでしたか?
安定性を犠牲にすれば(?)、割と何でもできるということがわかりましたね!
「VBAでラクマを動かすにはどうすればいいんだ~!!」と悩んでいた方は”一つの方法”としてぜひ参考にしてみて下さい。
「『sendKeys』だの『SetCursorPos』を使ったものなんて作れるか!」と言われると「ごもっとも!」としか言えないんですが・・・
自分で使うだけ、もしくは相手も了承していれば良いんじゃないでしょうか!
また何か新しいものを作った時はご紹介致します。
それでは!
コメント
先日メルカリ?の補助ツールを申請させて頂きました、山口と申します。
ちょうどラクマをPCから出品する際に画像を貼り付ける画面から一切動かない状態が続いております。そのため、出品がままならない状態です。
なのでもし宜しければこちらのExcelファイルの配布を希望なのですが可能でしょうか?
ご検討し程宜しくお願い致します。
ご質問ありがとうございます。
一つ確認させて頂きたいのですが、「ラクマをPCから出品する際に画像を貼り付ける画面から一切動かない状態が続いております」というのは、「こちらの記事を参考にして、ご自身で作成した処理が動かない」という意味でしょうか。
ラクマのツールについては”まだ”配布を予定しておりませんので、残念ながら現状お渡しすることはできません。
(特定のカテゴリにしか出品できないなど、機能的に完成していないためです)
処理の書き方についてはアドバイスができますので、メールやコメント等でご相談頂ければ幸いです。
こんにちは、先日メルカリの件で質問した初心者だったものです。
メルカリは出品時間を90min~150min(1日15件程度)でランダム出品することで利用停止にならず出品できています。やはり出品頻度が問題だったようです。
ありがとうございました。
さてラクマなのですが、商品名、商品説明と入力した後に価格を入力させると商品名、商品説明の欄が消えてしまいます。
価格のfor eachを先頭に持ってきてもダメでした。
何か原因がありますでしょうか?
ソースコードは以下です。
Dim obj As Object
Dim objAll As Object
Set objAll = objIE.document.getElementsByClassName(“form-control”)
For Each obj In objAll
If InStr(obj.Name, “item[name]”) > 0 Then
obj.Focus
obj.Value = “商品名”
Exit For
End If
Next
For Each obj In objAll
If InStr(obj.Name, “item[detail]”) > 0 Then
obj.Focus
obj.Value = “商品説明”
Exit For
End If
Next
For Each obj In objAll
If InStr(obj.Name, “item[sell_price]”) > 0 Then
obj.Focus
obj.Value = “300”
Exit For
End If
Next
お忙しい所恐縮ですがお時間あるときご回答をお願いします。
入力した文字が消えてしまう理由は、入力後に動作するはずのjavascriptが動いていないからですね。
ラクマに限らずメルカリでも同様の現象が発生するはずです。
以下の記事に解決策が載っておりますので、参考にして下さい。
https://rabbitfoot.xyz/vba-jquerykeyup/
藤見れいん様
ご回答ありがとうございました。そちらは何とかクリアすることが出来ました。
しかし別件で問題が発生しまして
ラクマの画像ファイルを選択するボタンをクリックする操作を以下のコードで行っております。
objIE.Document.getElementById(“image_tmp”).Click
しかしこれですと、IE側のファイル操作ダイアログにアクティブが取られてしまい、ステップインでもVBAウィンドウに戻ることが出来ません。
れいん様は他の方法で実装されたのでしょうか?
宜しければご回答ください。お願いいたします。
その件についてはこちらの記事をどうぞ。
https://rabbitfoot.xyz/vba-settimeout/
一応自動出品の自動化に関しては一通りの解説記事を書いておりますので、過去記事を漁ってみて下さい。