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

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

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

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

Q&A

解決済

1回答

426閲覧

VBA seleniumでweb上のセルに入力したいです。

kimimimu

総合スコア1

selenium

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

0グッド

0クリップ

投稿2024/01/14 03:10

実現したいこと

VBA seleniumでエクセルデータをwebシートに自動入力を実現したいと思っており勉強中です。

発生している問題・分からないこと

VBAで指定のURLを開き、ログイン後カテゴリーから入力したいページまで自動で出来るようになりました。
そのページは入力セル?入力欄?が50前後あります。
とりあえず、適当な入力セルに数値を入れてみようと思い、
開発者ツールで該当セルのselectorをコピーdriver.FindElementByCssにペースト。sendkeysで入力しようと思ったのですが、該当セルは空白のままです。
エラーは発生していなく、最後までおこなう状態です。
逆に該当セルを手入力、該当セルの値を変数に代入し、エクセルセルに値を反映は出来ました。

該当のソースコード

driver.FindElementByCss("#G04701Director > div.performanceInfoC > table.noborder.performanceInfoCGridArea > tbody > tr > td:nth-child(1) > div > div > div:nth-child(1) > div.wj-cells > div:nth-child(2) > div:nth-child(1)").SendKeys ("123") このコードでは空白でした。 text = driver.FindElementByCss("#G04701Director > div.performanceInfoC > table.noborder.performanceInfoCGridArea > tbody > tr > td:nth-child(1) > div > div > div:nth-child(1) > div.wj-cells > div:nth-child(2) > div:nth-child(1)").text Worksheets("記録").Range("D3") = text このコードではwebの値をエクセルに反映出来ました。

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

xpathでやってみても駄目でした。
selectorでコピペ値をエクセルに反映出来たので、CSS?が実現したい事に一番近づいているように思います。

補足

特になし

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

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

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

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

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

meg_

2024/01/14 03:56

text属性ですと該当要素以下のテキスト全体が取得できるのではないでしょうか?対象の要素ズバリにアクセスできていますでしょうか?
kimimimu

2024/01/14 05:24

お忙しい中、コメントありがうございます。 小生初心者でtext属性がわかっていなくもう少し調べて勉強してみます。 対象の要素にアクセスしているつもりでいたのですが、出来ていないかもわかりません。 調べてみたいと思います。 ありがとうございました。
guest

回答1

0

ベストアンサー

セレクターの最後がdivタグになっていますが、キーイン出来るのはinputタグとかtextareaタグですね。

「入力フィールドにフォーカスしていない状態でキーインした」という状態は手動操作でもあり得るので、エラーでなく、そういう状態になっているのかと思います。

投稿2024/01/14 04:13

otn

総合スコア86295

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

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

kimimimu

2024/01/14 05:21

お忙しい中、ご回答ありがとうございます。 たしかに、番号を入れて検索する箇所は、inputタグになっていました。 ここはsendkeyで入力出来ています。 番号を入れて検索した先に入力フォームがあるのですが、入力セルはdivタグになっています。 対象の要素にアクセス出来ていないか、他にinputタグtextareaタグがあるところがあり、探せていないですかね? もう少し手探りして調べようと思います。
kimimimu

2024/01/14 07:57

度々申し訳ございません。 開発者ツールで該当セルをダブルクリックした所、xpathでinputタグがありましたので、xpathでやってみたところ、エラーになりました。 driver.FindElementByXPath("//*[@id=""G04701Director""]/div[3]/table[2]/tbody/tr/td[1]/div/div/div[1]/div[1]/div[2]/div[1]/input").Clear 実行時エラー7 no such element error element not found for 原因も調べたのですが、解らず...。 もし目にとまったのでしたら、ご教授して頂けたら幸いです。
otn

2024/01/14 08:57

no such element なので、XPathが間違っていたと言うことです。 開発者ツールで得るそういうXPathは、「その時、その画面ではそういうXPathだった」というだけであり、プログラム実行時にも同じXPathとか限りません。 スクレイピングのプログラムを書く時は、人間がHTMLをみて、「このXPathならページのHTMLが多少変わっても大丈夫」というXPathやCSSセレクターを考えてそれを使います。
kimimimu

2024/01/14 09:05

丁寧なご回答ありがとうございます。 xpathが間違っているのですね。 知識が足らなく、申し訳ございませんでした。 全然勉強が足らないみたいなので、勉強します。 ありがとうございました。
otn

2024/01/14 12:17 編集

> xpathが間違っているのですね。 知識というか、「これを探せ」「それは見つかりません」というやりとりなので、知識が無くても、(少なくともその状況における)「これを」という指示が間違っていたことが分かるはずです。 とっかかりとしては、こういう方法はどうでしょうか? VBEで、該当の driver.FindElementByXPath(~~) にブレークポイントを設定して、プログラムを一旦止めて、 その時点で、「Seleniumから起動されたブラウザ」の開発者ツールで見ると、「その行のプログラムで指定すべきXPath」が分かるかと思います。これをなんどか繰り返して、毎回同じXPathになるのか、毎回異なるXPathになるのかを見る。毎回同じならそれをプログラムで指定すれば良いし、毎回異なるなら前回書いたように、「人間がHTMLをみて~~」というのを考えるしかない。
kimimimu

2024/01/14 22:53

度々ありがとうございます。 otn様の言う通りブレークポイントで一度止めて確認しながらやっていきます。 ありがとうございました。
kimimimu

2024/01/16 12:25

入力フィールドにフォーカスしていない状態でキーインしたを思い出し、 vba seleniumで該当セルをクリックするようにしxpathで試しましたが駄目でした。 クリック後、もう一回クリックするようにしたところ、小要素みたいなのが出てきてそのxpathで該当セルに自動入力出来ました。 ありがとうございました。
otn

2024/01/16 12:55

解決して良かったですが、Xpathを見ても入力可能なタグかどうかわからなかったと言うことは、 「キーイン出来るのはinputタグとかtextareaタグ」ということをそもそも知らなかった(最初の回答に私がそう書いたのにその意味が読み取れなかった)、 つまりHTMLについてほとんど何も理解していないと言うことでしょうか? その状態でスクレイピングのプログラムを書くのは無理があるかと思います。 スクレイピングは、 ・HTML と、 ・CSSセレクターまたはXPathのどちらか一方、出来れば両方 の基礎を理解してから取り組みます。多分半日~1日くらいで学べるレベルでOK。
kimimimu

2024/01/16 13:14

htmlはまったく理解していない、初心者です。 こんな小生に適切なアドバイスをして頂きありがとうございました。 本を買って勉強しながら、やっていこうと思います。 ありがとうございました。
otn

2024/01/16 13:57 編集

HTML入門書はおそらく自分でHTMLを書く人向けなので、スクレイピングだけならそこまで要りません。 定評のある解説サイト: https://www.tohoho-web.com/wwwbeg.htm をざっと目を通して、 さらによく目にするタグについては https://www.tohoho-web.com/html/index.htm で調べておく位でHTMLについては十分な気がします。 タグを特定する手段の1つであるCSSセレクターは、 https://www.tohoho-web.com/css/index.htm に説明がありますが、もう1つの手段であるXPathはこのサイトには無いですね。 「HTMLに入門せずにスクレイピングをするのは無理なので、最低限これだけは」というのが上記です。 もちろん入門書をちゃんと読むなら、知識に幅が出来るので、その方が良いです。 中級者くらいからは https://developer.mozilla.org/ja/docs/Web を見ている人が多そうです。
kimimimu

2024/01/16 14:13

毎日入力作業に1時間かかっておりまして、 スクレイピングで少しでも時短になればという思いです。 丁寧なご指導をして頂き、本当に感謝致します。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問