とっておきの手土産を教えて

エクセル&VBA&SeleniumBasic&Webdriverで,Edgeを動かしています。
Edgeで,タブを複数枚,開いているとき,現在,焦点があたっているタブを,一発で,取得する方法がわかりません。Driver.handle あたりのような気がしますが,やり方がわかりません。よろしくお願いします。

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

  • 補足です。今,焦点が当たっているタブ(=Edgeで,今,開いているタブ)=一番最後に,開いたタブでも,いいです。一番最後に開いたタブを,一発で,調べる方法がありますかね?よろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/08/08 14:23

A 回答 (3件)

「焦点が当たっているタブ」というのが、普通の意味での、「Seleniumの操作対象となっているタブ」とは違うと言うことのようですね。


補足にある、「一番最後に,開いたタブ」ということですかね?
であれば、最初から「一番最後に,開いたタブ」と書いておいてくれれば話が早かったのに。

最後に開いたタブであれば、通常は、プログラムからの操作で開くので、何のページを開いたかはわかっているはずです。その最後に開いたタブのhandleを知りたいと言うことであれば、タブを開く前のhandlesと開いた跡のhandlesを比べて、増えた物が最後に開いたタブのhandleだということです。
    • good
    • 0
この回答へのお礼

ご返信,ありがとうございます。状況の説明不足で,すみません。プログラムの操作で,新しいタブを開くと時もあれば,手動で,開くときもあって,両方ありますね。でも,最後のタブが,わかるのは,大きいですね。handlesの書き方を,おしえてほしいのですが。Dim i as Integer i = driver.handles とか,こんなふうですか?

お礼日時:2023/08/09 03:43

その通り、handleです。



> やり方がわかりません。
何のやり方でしょうか?handleで取得されるのは、FindElements~~ や SendKeysなどで検索・操作対象となるタブのことで、ブラウザ画面で選択されて表示されているタブとは関係ありませんが、そのこととの勘違いでしょうか?
ブラウザ画面で表示されているタブが何であるかを知ることは多分出来ません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご返信,ありがとうございます。説明不足で,すみません。Edgeで,複数のタブを開いているときに,プログラムを実行すると,今,焦点が当たっているタブ(=Edgeで,今,開いているタブ)とは,ちがう,おそらく,一番最初に開いたタブ(タブの1ページ目)に,いわれる通りのDriver.FindElementByCss().Clickなどのコマンドの操作が行くと思われます。これをなんとか,今,焦点が当たっているタブ(=Edgeで,今,開いているタブ)を,探して(取得して),このタブに,一発で,操作したいのです。ちなみに,今は,別案として,どうやっているかと言うと,プログラムがスタートしてから,ただちに,Driver.SwitchToNextWindowで,タブを次々にくっていって,各タブごとに,Driver.Urlと,サイト内の文字列を,Driver.FindElementByCss().Textで,文字列を取得して,If文と,InStr文で,操作したい文字列を含むタブを探し出して,やっと,目的のタブを探して,本番の操作をしています。今,焦点が当たっているタブ(=Edgeで,今,開いているタブ)を,一発で,探す(取得)する方法ってありますかね?

お礼日時:2023/08/08 14:19

タブの要素のclass属性に、activeなどのクラスが設定されているんじゃないですかね?


Seleniumの問題ではなく、スクレイピングしようとしてるサイト構成の問題なので、スクレイピングする前に、Webサイトがどのように動作しているのか調査してみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

ご返信,ありがとうございます。なるほどですね,それぞれのタブの何らかの属性から,activeを見つけれる可能性があるということですね。参考にします。ありがとうございます。

お礼日時:2023/08/08 12:53

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


おすすめ情報