柔軟に働き方を選ぶ時代に必要なこと >>

社内システムの自動ログインをしたく、VBSで作成しているのですが
実行すると下記部分でエラーが発生してしまいます。

==========================================
objIE.document.loginForm.action = "login.do".value = "ユーザID"
objIE.submitForm(document.loginForm)
objIE.document.loginForm.action = "goPassChange.do" = "パスワード"
==========================================
上記のlogin.doの部分が見つからないとエラーが発生してしまいます。

下記HPソースです。
==========================================
function login() {
document.loginForm.action = "login.do";
submitForm(document.loginForm);
}

function goPassChange() {
document.loginForm.action = "goPassChange.do";
loginForm.submit();
}

function doubleLogin() {
// index.html から起動されなかった場合は、index.htmlに遷移。
// ブラウザバージョンチェックの実施およびメニューなどを消して起動するため。
var fromIndex = 'from_index';
var locationHref = "./";
if (window.name != fromIndex) {
location.href = locationHref;
return;
}

if (doubleLoginmsg != "null") {
alert(doubleLoginmsg);
==========================================
ソース元の抽出している場所が違うのでしょうか?

==========================================
<td class="center">ユーザID
</td>
<td>
<input type="text" name="loginBTO.userId" maxlength="50" size="20" value="" class=".login">

</td>
</tr>
<tr>
<td>
</td>
<td class="center">パスワード
</td>
<td>
<input type="password" name="loginBTO.password" maxlength="50" size="20" value="" class=".login">

=======================================
こちらのnameから抽出するのか混乱してしまい手さぐりでやりましたが
どうしてもうまくいきません・・

ご教示の程よろしくお願いまします。

質問者からの補足コメント

  • 社内システムにIE上でアクセスすると新規ウィンドウで立ち上がる為、
    その為、ソースが見当たらないとなってしまうのでしょうか?

      補足日時:2018/03/29 21:27

A 回答 (1件)

こんにちは



VBSは知らないので、よくわかりませんけれど・・・、やっていることが違うのでは?

HTMLドキュメントは取得できているものとして、質問者様が行うべきことは
1)HTMLの該当するinput要素にIDをセット
2)HTMLの該当するinput要素にパスワードをセット
3)(必要な場合は、action先を設定)
4)(submitボタンをクリックあるいはform要素をsubmit)
ではないのでしょうか?
 質問文にご提示の内容が断片的なので、ボタンの有無や、changeイベントの発生で自動的にsubmitしているのか(?)などが不明ですが、ボタンが無い場合等はform要素をsubmitすればよいと思われます。
なさりたい内容によっては、formのaction先を変える必要があるのかも知れませんが、デフォルトのaction属性がどうなっているか、ログイン時のaction先はどこが正しいのかなどが不明なので、文章だけからではわかりません。

とはいえ、ご提示の内容は、上記の内容とは無関係の処理を行おうとしているように見えます。
>上記のlogin.doの部分が見つからないとエラーが発生してしまいます。
VBSは知らないので、文法もわかりませんが、見つからないのではなくて
>"login.do".value
って、String.Valueですから、そのような属性値は無いのではと想像しますけれど?
そもそもactionに代入しようとしている内容が、hoge=fugaの結果になっているので、論理値になっちゃうし、(多分Falseでしょうけれど)それって意味があるのですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qブラウザ起動~ログインまでのバッチ化

ブラウザを立ち上げ、特定のページにアクセスし(例えばmixi)、
IDとパスワードを入力してログイン、という作業を
バッチ化できないものかと考えているのですが、可能でしょうか?
可能でしたら、やり方を教えてください。

Aベストアンサー

ユーザ名とパスワードの入力画面は必要が無いという意見もありますが(そして mixi の場合それは真ですが)、ページによってはセッションIDなどが発行されるため、どんな時でも必要がないわけではありません。

と前置きしておいて、私だったら ruby win32ole で自動化するかなあ。
mixi だったらこんな感じ。

#!ruby -Ks
require "win32ole"
ie = WIN32OLE.new("InternetExplorer.Application")
ie.Navigate("http://mixi.jp/")
ie.Visible = true
wait_load(ie)
while ie.Busy
sleep 1
end
ie.Document.getElementByID("email").Value = "your@mail.address"
ie.Document.getElementByID("password").Value = "yourpassword"
inputs =ie.Document.getElementsByTagName("input")
inputs.item(4).click

ユーザ名とパスワードの入力画面は必要が無いという意見もありますが(そして mixi の場合それは真ですが)、ページによってはセッションIDなどが発行されるため、どんな時でも必要がないわけではありません。

と前置きしておいて、私だったら ruby win32ole で自動化するかなあ。
mixi だったらこんな感じ。

#!ruby -Ks
require "win32ole"
ie = WIN32OLE.new("InternetExplorer.Application")
ie.Navigate("http://mixi.jp/")
ie.Visible = true
wait_load(ie)
while ie.Busy
sleep 1
end
ie.Do...続きを読む

QVBScriptから指定URLを開く方法

 ある特定のWebページをVBScriptから開きたいのですが方法が探せませんでした。VBScriptからWebページを開く方法、もしくはhttp putを行う方法を教えてください。よろしくお願いします。

Aベストアンサー

こんなので、どうでしょうか?

Set objIE = Wscript.CreateObject("InternetExplorer.Application")
objIE.Navigate2 "http://www.goo.ne.jp/"
objIE.Visible = TRUE
Set objIE =Nothing

QVBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法

VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法を教えてください。
現在、下のような方法で行っているのですが応用が利かないので改善したいと思っています。

Set IE = CreateObject("InternetExplorer.Application")
Set WshShell = CreateObject("WScript.Shell")

IE.Visible = True
IE.Navigate("https://サイトのURL")

Do Until IE.Busy = False
WScript.Sleep 1000
WshShell.SendKeys "y"
Loop
'(セキュリティの警告が出るため)
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WScript.Sleep 100
WshShell.SendKeys "loginid"
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WScript.Sleep 100
WshShell.SendKeys "password"
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "{ENTER}"

操作したいページのソースの一部を抜粋すると下記のようになっています。

テキストボックス
<INPUT type="text" name="loginId" class="Necessary" size="20" maxlength="5" value="" tabindex="20">

ボタン
<INPUT class="button10" type="button" name="sentaku" value="認証" onClick="javascript:execute・・・・略

うまく操作できる方法を教えてください。
よろしくお願いします。

VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法を教えてください。
現在、下のような方法で行っているのですが応用が利かないので改善したいと思っています。

Set IE = CreateObject("InternetExplorer.Application")
Set WshShell = CreateObject("WScript.Shell")

IE.Visible = True
IE.Navigate("https://サイトのURL")

Do Until IE.Busy = False
WScript.Sleep 1000
WshShell.SendKeys "y"
Loop
'(セキュリティの警告が出るため)
WScript.Sleep 100
WshShell.Send...続きを読む

Aベストアンサー

set f=oIE.document.forms(0)
f.loginId.value="loginid"
f.password.value="password"
WshShell.SendKeys "{ENTER}"

テキスト領域でエンターするとsubmitになるので
エンターをsendkeysするのはありだとおもいますよ

QVBS実行時エラー オブジェクトがありません 回避方法について

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだとは思うのですが、何が原因かがわからなく。。

○エラーメッセージ
エラー:オブジェクトがありません。:'objIE.Document.getElementByName(...)(...)'
コード:800A01A8
ソース:Microsoft VBScript 実行時エラー

○コード
'Option Explicit

Dim tmp 'CSV格納
Dim tmp2 'CSV分割
Dim SiteArray(10) 'ID,PW,URL格納
Dim SiteURL 'URL格納
Dim SiteID 'ID格納
Dim SitePW 'PW格納

Dim i
dim objFSO
dim stmCsvFile

'URL,ID,PWをCSVより読込
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set stmCsvFile = objFSO.OpenTextFile("C:\Users\***\Desktop\login.csv")

Do Until stmCsvFile.AtEndOfLine = True
tmp = stmCsvFile.readline
tmp2 = Split(tmp, ",")
SiteArray(i) = tmp2(1)
i = i + 1
Loop

stmcsvfile.Close


'URL,ID,PWを格納
SiteID = SiteArray(1)
SitePW = SiteArray(2)
SiteURL = SiteArray(0)

'---------- ひらく

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate SiteURL
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'---------- ID/PASSの入力

objIE.Document.getElementsByName("username")(0).Value = SiteID
objIE.Document.getElementsByName("password")(0).Value = SitePW

'---------- SUBMIT

objIE.Document.getElementsByName("login_form")(0).Submit
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'----------

宜しくお願い致します。

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだ...続きを読む

Aベストアンサー

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるかどうかさえ確認できませんよね。
その辺りはどうなんでしょうか?それで、Length プロパティを調べるように書いたわけです。

ふつう、例えば、ここの「教えて!goo」なんかでも、IDとパスワードは、きちんと、[ID(uname, pass)]を持っています。そしてIDには、添字は存在しません。

VBAがあれば、VBEditorのローカルウィンドウで、そのプロパティを確認していただくしかないと思います。もしかしたら、最初からとれていないのかもしれません。

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるか...続きを読む

Q指定したURLを表示させるバッチファイル

IEが起動してない状態で、IEを起動させて指定したURLを表示させるバッチファイルを教えて下さい。
バッチファイルAを実行すると、○●○●○●というURLでIEが起動し、バッチファイルBを実行すると、△▲△▲△▲というURLでIEが起動する。そういうことです。
よろしくお願いします。

Aベストアンサー

私がやった通りのことを書きます。ご参考に。
(1)インターネットエクスプローラーがExplore(最後rなし)と言うプログラム名であることを知る。
(2)スタート-検索-ファイルやフォルダ-Explore
で検索する。
(3)C:¥Program Files\Internet Explorerにあることを知る。(eのマークによりプログラムファイルであることを知る。)(こちらは最後にrがつく)
(4)バッチファイルを作る。メモ帳に
cd "c:\Program Files\Internet Explorer"
Iexplore "http://www.okweb.ne.jp/kotaeru.php3?qid=610162"
と入れて、url.batと言うファイル名で保存。
urlは任意の名で良い。「.bat」は必須です。
”http://・・は任意のURLで可。
(5)メモ帳を閉じる。私の場合はc:¥My Documentsに保存されたことに留意。
(6)スタート-プログラムからDos画面をだす。(98の場合)
(7)CD "c:\My Documents"エンタを入れる。
(8)urlエンタと入れる。.batは不要。
(9)上記のOKWEBの画面になり、止まる。

私がやった通りのことを書きます。ご参考に。
(1)インターネットエクスプローラーがExplore(最後rなし)と言うプログラム名であることを知る。
(2)スタート-検索-ファイルやフォルダ-Explore
で検索する。
(3)C:¥Program Files\Internet Explorerにあることを知る。(eのマークによりプログラムファイルであることを知る。)(こちらは最後にrがつく)
(4)バッチファイルを作る。メモ帳に
cd "c:\Program Files\Internet Explorer"
Iexplore "http://www.okweb.ne.jp/kotaeru...続きを読む

QIE を開いてページ内のリンクをクリックする VB スクリプト

IE を開いて、ページ内のリンク (アンカー) をクリックして、リンク先のページを開くまでの VB スクリプトの書き方を教えてください。

Aベストアンサー

http://www.ken3.org/cgi-bin/group/vba_ie.asp
このページが参考になりますよ。

QJavaScriptでIEの自動ログインについて

JavaScriptの初心者でIE上で表示されたログインボタンをクリックしたいのですが、name="ボタン名"がなくクリックできないんです。

「ie.document.MainForm(0).submit.click();」と記入してみたのですが、クリックできないんです。

下記のようなボタンをJavaScriptで押すにはどうしたらいいのでしょうか?

どなたかすいませんがご教授ください。

=====================================================
ボタンのHTML

<form name="MainForm" method="POST" action="/login" target="_self">

<table border="0" width="510">
<tr>
<td width="140"></td>

<td width="160" align="center"><input type="submit" style="width:100" value="ログイン" onClick="return buttonHandler('ok');"></td>

<td width="210"></td>
</tr>
</table>
<br>
</form>

JavaScriptの初心者でIE上で表示されたログインボタンをクリックしたいのですが、name="ボタン名"がなくクリックできないんです。

「ie.document.MainForm(0).submit.click();」と記入してみたのですが、クリックできないんです。

下記のようなボタンをJavaScriptで押すにはどうしたらいいのでしょうか?

どなたかすいませんがご教授ください。

=====================================================
ボタンのHTML

<form name="MainForm" method="PO...続きを読む

Aベストアンサー

document.MainForm.submit()

じゃダメなの?

あとは
document.MainForm.elements[0].click()
とか
document.getElementsByTagName("input")[0]
とか

var inputs = document.getElementsByTagName("input");
for (var i = 0, l = inputs.length; i < l; i++) {
var input = inputs[i];
if (input.type == "submit") {
input.click();
break;
}
}
とかしてもいいわね

QVBSでHTMLソースの取得方法で

VBScriptでBODY部のHTMLソースを取得したいのですが出来ない場合があって悩んでいます。

msgbox objIE.Document.Body.InnerTextというかたちで表示させています。
ほとんどのページで問題なく出来るのですが・・・・
フレームで出来ているページに関して取得が出来ません。
そういった場合どうすればよいのでしょうか?
極論を言えば指定HTMLソースの中に文字検索が出来れば問題はないのですがソースが取得できないので検索しようがありません。

Aベストアンサー

例えば
http://www.shugiin.go.jp/index.nsf/html/index_kousei.htm
ならば
msgbox objIE.Document.frames("f2_main").Document.Body.InnerText
とか
msgbox objIE.Document.frames(2).Document.Body.InnerText
で取得できます。

ただし、フレームで別ドメインを表示している場合は、不可能です。

参考URL:http://support.microsoft.com/default.aspx?scid=kb;ja;167796

QVBScriptで、ファイルから任意の行のみ取り出す方法について

VBScriptにて、あるファイル内を1行ずつ順番に取り出しながら、
途中の数行を別のファイルに書き出したいのですが、方法が分からず
悩んでいます。

--------------------------------------------------------------
set objFS = CreateObject("Scripting.FileSystemObject")
set objReadText = objFS.OpenTextFile("C:\read.log")
set objWriteText = objFS.CreateTextFile("C:\write.log")

count = 1
Do Until objReadText.AtEndOfStream

If count >3 And count < 8 Then

strLine = objReadText.ReadLIne
objWriteText.WriteLine(strLine)
ElseIf count = 8 Then
Exit Do
End If

count = count + 1
Loop

objReadText.Close
objWriteText.Close
--------------------------------------------------------------

上記にて、例えばread.logの4行目から7行目だけをwrite.logに書き出したいのですが、
想定した途中の行だけを別ファイルに書き出す事が出来ません。
どなたかアドバイスを頂けないでしょうか。

VBScriptにて、あるファイル内を1行ずつ順番に取り出しながら、
途中の数行を別のファイルに書き出したいのですが、方法が分からず
悩んでいます。

--------------------------------------------------------------
set objFS = CreateObject("Scripting.FileSystemObject")
set objReadText = objFS.OpenTextFile("C:\read.log")
set objWriteText = objFS.CreateTextFile("C:\write.log")

count = 1
Do Until objReadText.AtEndOfStream

If count >3 And count < 8 Then

strLine = objR...続きを読む

Aベストアンサー

set objFS = CreateObject("Scripting.FileSystemObject")
set objReadText = objFS.OpenTextFile("C:\read.log")
set objWriteText = objFS.CreateTextFile("C:\write.log")

count = 0
Do Until objReadText.AtEndOfStream
 strLine = objReadText.ReadLIne
 count = count + 1
 
 If count >3 And count < 8 Then
  objWriteText.WriteLine(strLine)
 End If
 If count = 8 Then
  Exit Do
 End If

Loop

objReadText.Close
objWriteText.Close

QvbsでIEの操作

vbsでIEの自動操作を行おうとしているのですが,最後のボタンだけなぜか押せません.
オブジェクトが存在しないとエラーになります.

下記は操作しようとしているところのソースです.

<div id="layerPanelSessions" style="display:">

<table cellpadding="1" cellspacing="0" border="0" width="100%">
<tr>
<td bgcolor="#CCCCCC">
<table cellpadding="0" cellspacing="0" border="0" width="100%">

<tr bgcolor="#EEEEEE">
<td>

<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr valign="top">
<td>
<table cellpadding="4" cellspacing="0" border="0" width="100%">
<tr valign="top">
<td><img src="/dana-cached/imgs/icn18x18SessionNC.gif" alt="ネットワークコネクト" width="18" height="18" border="0"></td>
<td width="100%">ネットワークコネクト <br><span class="cssSmall">システム トレイに [ネットワーク コネクト] アイコンが表示されて「接続」となっていると、ネットワーク上でセキュアにアプリケーションにアクセスすることができます。<br>
<br>そうでない場合はネットワーク コネクトの [セッションの開始] アイコンをクリックして接続します。</span> </td>

</tr>
</table>
</td>
<td align="right">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td colspan="6"><img src="/dana-cached/imgs/space.gif" width="1" height="1"></td>
</tr>
<tr>
<td bgcolor="#EEEEEE" nowrap ><img src="/dana-cached/imgs/space.gif" width="10" height="10"> <input name="btnNCStart" type="button" value="開始" onclick="self.location='/dana/nc/ncrun.cgi?launch_nc=1'; return false;"></td>
<td><img src="/dana-cached/imgs/space.gif" width="5" height="1"></td>
<td bgcolor="#CCCCCC"><img src="/dana-cached/imgs/space.gif" width="1" height="1"></td>
<td bgcolor="#EEEEEE"><img src="/dana-cached/imgs/btnPanelItemBlank.gif" alt="" width="20" height="20" border="0"></td>
<td><img src="/dana-cached/imgs/space.gif" width="1" height="1"></td>
</tr>
</table>
</td>
</tr>
</table>


<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td bgcolor="#CCCCCC"><img src="/dana-cached/imgs/space.gif" width="1" height="1"></td>
</tr>
</table>




<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td bgcolor="#CCCCCC"><img src="/dana-cached/imgs/space.gif" width="1" height="1"></td>
</tr>
</table>


</td>
</tr>
</table>
</td>
</tr>
</table>
</div>

で,下記が操作用の私が作成したコードです.

.Document.all("btnNCStart").Click

本当に困っています.どなたかよろしくお願いいたします.

vbsでIEの自動操作を行おうとしているのですが,最後のボタンだけなぜか押せません.
オブジェクトが存在しないとエラーになります.

下記は操作しようとしているところのソースです.

<div id="layerPanelSessions" style="display:">

<table cellpadding="1" cellspacing="0" border="0" width="100%">
<tr>
<td bgcolor="#CCCCCC">
<table cellpadding="0" cellspacing="0" border="0" width="100%">

<tr bgcolor="#EEEEEE">
<td>

...続きを読む

Aベストアンサー

ボタンはidを持っていないので、Document.All()で検索できません。

document.getElementsByName("btnNCStart")(0).click


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報