WEBページのテキストボックスに文字を入力したり、ラジオボタンやメニューを自動選択させるプログラムを組もうとしています。
ページのソースをみると、下記のように入力フォームの部分はJAVAScriptで作成されているようでした。
<script language="javascript" type="text/javascript" src="js/jquery-latest.js "></script>
<script>
var loading_img=new Image();
loading_img.src='images/remembermilk_orange.gif';
function check_final() {
$error=0;
$('input.integer').each(
function() {
if (!$error) {
if (!this.value.match(/^\d*$/)) {
alert("欄位輸入錯誤,價格欄位請輸入數字");
this.focus();
$error=1;
JAVAで作成された部分をVBでコントロールするにはどのような方法を用いればいいのでしょうか?
私なりにネットで調べて、getElementsByName等の方法を試してみましたがうまくいきませんでした。
宜しくお願いします。
質問内容のJavaScript部分だけだと、Form部分の作成は行われていないようです。
(数字かどうかの入力チェックが行われているようです)
jquery-latest.jsを読み込んでいるようですが、これはライブラリですし、
他に読み込まれているJavaScriptファイルや、JavaScriptのコードはないでしょうか?
また、Html内にFormの記述はないのでしょうか?
JavaScriptによって出力されているフォームであっても、
名前や順序が特定できれば、getElementsByNameなどによってフォームの部品を特定して操作できます。
このあたりの詳細は下記のサイトがわかりやすいです。
三流君VBAでInternetExplorer.Applicationを操作する(IE操作)
http://www.ken3.org/cgi-bin/group/vba_ie.asp
getElementsByTagNameでタグ指定
http://www.ken3.org/vba/backno/vba164.html
ラジオボタンの操作
http://www.ken3.org/vba/backno/vba148.html
NAMEが同じフォームの項目へデータをセットする
http://www.ken3.org/vba/backno/vba176.html
Javascriptのイベントの起動方法
http://www.ken3.org/vba/backno/vba155.html
など
アップロード処理については、
汎用ボタン(type="button")でアップロード処理が行われているので、
このボタンをクリックする必要があると思います。
ですので、
<INPUT onclick=loading_image(0) type=button value=アップロード[上傳]>
をクリック処理すると実行できると思います。
※クリックするとJavaScriptのloading_image関数が実行される。
とりあえずの方法としては、
.elements(3)がアップロードボタンのようなので、
.elements(3).Click
とするとよいと思います。
一方、問題なのが、ファイル名の設定についてです。
下記を見ていただくとわかると思うのですが、
<input type=file>はReadOnly属性なので直接値を書きかえることができないようです。
<input type=file>への値代入
http://www.happy2-island.com/bbs/bbs.cgi?mode=past&no=180
下記を試してみるともしかしたら上手くいくかもしれません。
(今考えたコードなので実際に試したわけではありません。
セキュリティの問題で通用しないかもしれません
その場合はSendKeyによってキー入力をさせる方法くらいしかなさそうです)
.elements("upload").outerHTML = "<INPUT id=upload type=name size=8 name=upload value='c:\testfile.txt'>"
type=fileだと初期値および値が設定できないので、
type=fileの項目をtype=textの項目に無理やり変更してしている。
ご回答ありがとうございます。
type=textに変更した場合、ファイルのアップロードがうまく機能しなかったため、SendKeysにて対応することにしました。
しかしその場合、データベース上にある複数のファイル名を自動入力させることは可能でしょうか?
この返信内容は、今回の質問とは別の新たな質問になると思いますので、下記URLにて新しく質問を出しました。
http://q.hatena.ne.jp/1174964318
もし宜しければアドバイス願います。
ご回答有難う御座います。
おっしゃった通り、HTML内にformの設定が有りました。申し訳有りません、確認不足ですね。
form設定部分のソースは下記になります。
<FORM id=fileform0 action=upload/upload.php?p=0 </p>
method=post target=target_upload
encType=multipart/form-data>
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; WIDTH: 1px; BORDER-BOTTOM: 0px; HEIGHT: 1px"
name=target_upload src="about:blank"></IFRAME><INPUT </p>
type=hidden value=25027.1174655958
name=UPLOAD_IDENTIFIER><INPUT type=hidden value=512000 </p>
name=MAX_FILE_SIZE> <INPUT id=upload type=file size=8 </p>
name=upload>
<INPUT onclick=loading_image(0) type=button value=アップロード[上傳]>
</FORM>
このソースはテキストボックス内にファイル名を入力して送信ボタンを押し、画像をアップロードする部分の抜粋です。
こちらの部分でファイル名を自動入力し、画像を自動アップロードするために下記のように組んでみたのですが、うまくいきませんでした。
'===========================
'= 出品フォーム画像の設定と送信
'===========================
Sub AddPictureFormSetProc()
With objIE.Document.forms(1)
'フォームの設定
.elements("要素名").value = "ファイル名"
'フォームの送信
.Submit
End With
End Sub
要素名の設定が悪いのかと思い、.elements(0)から.elements(5)まで手当たり次第に試しましたがやはりだめでした。
ただ、なぜか、.elements(3)の時には
<INPUT onclick=loading_image(0) type=button value=アップロード[上傳]>
の部分のアップロード[上傳]の文字が設定した”ファイル名”に置き換わりました。
反応があるのでフォームの指定は間違いなく、要素の指定に問題があるのでは、と考えているのですが・・・ここで行き詰りました。