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

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

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

W3C(World Wide Web Consortium)は、World Wide Webで使用される各種技術の標準化を推進する国際的な非営利団体。提唱している標準を「W3C勧告」(W3C recommendation)と呼び、Webに関する多くの技術仕様が含まれます。

Microsoft Edge

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

1706閲覧

msedgedriver で フレームを XPath を使用して選択したい

kamikazelight

総合スコア305

W3C

W3C(World Wide Web Consortium)は、World Wide Webで使用される各種技術の標準化を推進する国際的な非営利団体。提唱している標準を「W3C勧告」(W3C recommendation)と呼び、Webに関する多くの技術仕様が含まれます。

Microsoft Edge

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2021/07/27 14:12

インデックスでフレーム選択することは出来るのですが
XPath を使用してフレーム選択を行いたいです

対象フレームのElementIDの取得はXPathで出来るのですが
エレメントのメソッドでフレーム選択に使用できそうなものは見つけられませんでした。
なにか方法はないのでしょうか?

PowerShell

1Class WebDriver{ 2 3 [Diagnostics.Process] $Process 4 [UInt16] $LocalPort 5 6 WebDriver([String] $WebDriver){ 7 $This.Process = start $WebDriver -WindowStyle Hidden -PassThru 8 do{ 9 $This.LocalPort = Get-NetTCPConnection -OwningProcess $This.Process.Id -LocalAddress "127.0.0.1" -State Listen -ErrorAction SilentlyContinue|% LocalPort 10 }while($This.LocalPort -eq 0) 11 } 12 13 [PsCustomObject] Get([String] $Url){ 14 $rst = Invoke-RestMethod -Method Get -uri "http://localhost:$($This.LocalPort)$Url" 15 return $rst.value 16 } 17 [PsCustomObject] Post([String] $Url, [PsCustomObject] $Arg){ 18 $Json = $Arg|ConvertTo-Json -Compress 19 $Body = [Text.Encoding]::UTF8.GetBytes($Json) 20 $rst = Invoke-RestMethod -Method Post -uri "http://localhost:$($This.LocalPort)$Url" -body $Body -ContentType Application/json 21 return $rst.value 22 } 23 [WebSession] NewSession(){ 24 $Body = @{capabilities=@{}} 25 $Result = $This.Post("/session",$Body) 26 return [WebSession]::new($This, $Result.SessionID) 27 } 28} 29 30Class WebSession{ 31 32 [WebDriver] $WebDriver 33 [String] $SessionID 34 35 WebSession([WebDriver] $WebDriver, [String] $SessionID){ 36 $This.WebDriver = $WebDriver 37 $This.SessionID = $SessionID 38 } 39 [PsCustomObject] NavigateTo([String] $Url){ 40 $body = @{url=$Url} 41 return $This.WebDriver.Post("/session/$($This.SessionID)/url",$body) 42 } 43 [PsCustomObject] SwitchToFrame([int] $id){ 44 $body = @{id = $id} 45 return $This.WebDriver.Post("/session/$($This.SessionID)/frame",$body) 46 } 47} 48 49Class WebElement{ 50 51 [WebDriver] $WebDriver 52 [WebSession] $WebSession 53 [String] $ElementID 54 55 WebElement([WebSession] $WebSession, [String] $ElementID){ 56 $This.WebDriver = $WebSession.WebDriver 57 $This.WebSession = $WebSession 58 $This.ElementID = $ElementID 59 } 60} 61 62 63$EdgeDriver = [WebDriver]::new(<msedgedriver.exeのパス>) 64$sess = $EdgeDriver.NewSession() 65$sess.NavigateTo("https://teratail.com/questions/351530") 66 67# インデックスでフレーム選択は出来る 68$sess.SwitchToFrame(1) 69 70# ホントはXPathで指定したい 71# //*[@id="google_ads_iframe_/83555300/leverages/teratail/pc_article_underarticleleft_0"] 72 73$EdgeDriver.Process.Kill()

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

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

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

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

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

guest

回答1

0

自己解決

SeleniumをPowerShellで利用するためには
インストールが必要と思っていてWebDriver直で触っていましたが

SeleniumのWebDriver.dllをAdd-Typeするだけで使用できると判明

そちらを使用すればXPathでフレーム選択できるので
一応解決済みとします。

投稿2023/02/17 23:56

kamikazelight

総合スコア305

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問