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

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

VB.NET

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

Q&A

解決済

2回答

770閲覧

Webページのテキストボックス操作 nameもidも無くclassしかない

Galax

総合スコア5

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

VB.NET

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

0グッド

0クリップ

投稿2020/03/18 15:00

前提・実現したいこと

あまりHTMLやJavaScriptをまだ理解できておらず申し訳ありません。
自動で他のWebサイトのテキストボックスの値を書き換えてボタンを押すプログラムを作ろうとしています。
VB.netで書いています。

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

https://caro.blog.ss-blog.jp/2019-10-30

を参考に、WebViewでそのサイトを表示させるところまで成功しました。
書き換えようとするテキストボックスにはnameやidは無く

<div> <input class="input-default" placeholder="〇〇" value="" /> </div> としか書いていません。 classを指定するにはgetEkementsByNameの代わりにgetElementsByClassNameではないかと思ったのですが同じclass名はそのページにたくさんあり、どのようにしていしたらいいかよくわかりません。 どなたか、そのテキストボックスを指定するよい方法をご教示いただけないでしょうか?

該当のソースコード

VB.net
まず、試しに、テキストボックスの値を取得しようとしました。
Dim script As New System.Text.StringBuilder
Dim result As String = ""
script.AppendLine(String.Format("var result = document.getElementsByClassName('input-default').item(0).value;"))
WebView1.InvokeScript("eval", script.ToString())
MsgBox(result)

 しかし、resultには何も入りません。

試したこと

 より上位の、特定できるクラス名を入れても当然値は取れません。

補足情報(FW/ツールのバージョンなど)

VisualStudio2019 community リンク先の条件を満たし、Microsoft .net Framework 4.6.2 , WindowsFormで作っています。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/03/18 22:38

WebView の使用は必須ですか? WebBrowser でもレジストリの変更で IE11 レベルで動かすことはできますが。 html や javascript の知識が十分ではないとのことですが、であればそれらの知識はあまり必要とせず、かつネットでもドキュメントの多い WebBrowser を使ってはいかがですか?
退会済みユーザー

退会済みユーザー

2020/03/18 22:55

placeholder の設定値はユニークではないのですか?
退会済みユーザー

退会済みユーザー

2020/03/18 22:59

余計なお世話かもしれませんが大事なことを・・・ クローラを作って図書館のサイトにアクセスしたら業務妨害とかで逮捕されたという事例があります。アクセス先が他人のサイトなら許可を取ってからにした方がよさそうです。
m.ts10806

2020/03/18 23:50

nameやid入れれば済む話では? そもそもですがnameいれないとサーバーサイドで値とれなかったような。 入れられない理由があるのでしたら記載願います。
m.ts10806

2020/03/18 23:51

>自動で他のWebサイトのテキストボックスの値を書き換えてボタンを押すプログラムを作ろうとしています。 許可とってないのでしたらやめたほうが良いと思います。
Galax

2020/03/19 12:05

ありがとうございます。 これは孫請けの依頼で、直接の依頼が「edgeベースで」という指定なのでIE11ではうまくいかなかった事情があったと思われます。 placeholderの値はもしかしたら使えるかもしれません。 nameやidが入れられないのは他のサイトだからです。 この案件を調べているうちに「許可が得られそうにないからやめたほうがいいのではないか」とも思ったのですがいまさら「怪しいからやめます」とは言い難い状況です。
退会済みユーザー

退会済みユーザー

2020/03/21 02:25

質問者さん、上のコメントの後無言になってしまいましたが、この先どうするのでしょう? placeholder の設定値を使って特定する話はどうなったのですか? 怪しいからやめるとか、特定できないからギブアップするとかいうことなら、その旨書いてこのスレッドはクローズしていただけませんか? 無言は NG です。
Galax

2020/04/19 11:45

返信大幅に遅くなり申し訳ありません。この問題そのものはなんとか解決することができました。
guest

回答2

0

いただいたアドバイスをもとに、
script.AppendLine(String.Format("select1.querySelectorAll('.XXX').item(0).value = x;"))
としたうえで、バックグラウンドで時間を稼いで

WebView1.InvokeScript("eval", script.ToString())
とすることでxの値が反映されることになりました。

投稿2020/04/19 11:47

Galax

総合スコア5

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

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

0

ベストアンサー

querySelectorAll()querySelector()が使えるのでは、と思います。

例えば以下のHTMLでfooterの中の.input-defaultを指定したいとき

HTML

1<header> 2 <input class="input-default" placeholder="〇〇" value="" /> 3</header> 4<main> 5 <input class="input-default" placeholder="〇〇" value="" /> 6</main> 7<footer> 8 <input class="input-default" placeholder="〇〇" value="" /> 9</footer>

JavaScript側では以下のように記述することで、
jQueryやCSSのセレクタの感覚で、要素を特定して指定できます。

JS

1elms = document.querySelectorAll('footer .input-default'); 2alert(elms[0]);

参考:
https://developer.mozilla.org/ja/docs/Web/API/Document/querySelectorAll

投稿2020/03/18 15:06

編集2020/03/18 15:14
new1ro

総合スコア4528

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

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

Galax

2020/03/19 12:06

ありがとうございます。試みてみます。
Galax

2020/04/19 11:51

いただいたアドバイスをもとに script.AppendLine(String.Format("select1.querySelectorAll('.XXX').item(0).value = x;")) としたうえで、バックグラウンドで時間を稼いで WebView1.InvokeScript("eval", script.ToString()) とするとxの値が反映されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問