107480
UWSC 仮 掲示板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオン
動作不具合での質問の場合には環境を表記(OS,バージョン等)
タイトルは内容を表し、内容はネットゲーム関係禁止
自身でコードを書く気の無いナマケモノは特に質問禁止
失敗作でもコードを投稿すること(具体性の無い質問は無視される可能性大)

UWSC掲示板 が復活することを祈り、それまでの繋ぎとして。
環境設定[s7777777]

UwscWebDriverでIEGETSRCやIEGETDATA / 太田
そろそろIEからの移行を計画している者です。
UwscWebDriverでIEGETSRCやIEGETDATA相当の事は出来ますでしょうか?
cgiページから各種データ取得したいと考えております。

No.1384 2021/10/18(Mon) 12:28:35

Re: UwscWebDriverでIEGETSRCやIEGETDATA / stuncloud
できます
具体的な使用方法についてはwikiをご参照ください
https://github.com/stuncloud/UwscWebDriver/wiki

No.1385 2021/10/18(Mon) 13:45:27

Re: UwscWebDriverでIEGETSRCやIEGETDATA / 太田
ありがとうございます。
戻り値 = driver.GetSource()
ですね、試してみます。助かります!!

No.1386 2021/10/18(Mon) 20:14:42
UwscWebDriver.uws で変数の定義設定[DIM]付加のお願い / ahqiao
UWSCの[OPTION EXPLICIT]構文後に[CALL UwscWebDriver.uws]を入れると、約50個ほどの変数が[定義していない]のメッセージが発生する。
最初にVer-0.7.1の時に気付いて、Ver-0.7.2のVersion-Upがあったので、切り替えた時も同様でした。Version-Upのたびに個別で[DIM]を追加しなければなりません。またVer-0.7.3もUpされていますが、私はまだUpしていません。
どうか[UwscWebDriver.uws]内に全変数の[DIM]付加をお願い出来ないでしょうか?
(OS=Win7, 32bit / UWSC=Free Ver-5.3.0.2)

No.1380 2021/10/04(Mon) 15:43:28

Re: UwscWebDriver.uws で変数の定義設定[DIM]付加のお願い / stuncloud
対応します
https://github.com/stuncloud/UwscWebDriver/issues/14

No.1381 2021/10/04(Mon) 16:17:58

Re: UwscWebDriver.uws で変数の定義設定[DIM]付加のお願い / stuncloud
0.7.4にて対応しました
https://github.com/stuncloud/UwscWebDriver/releases/tag/0.7.4

No.1382 2021/10/05(Tue) 11:39:31

Re: UwscWebDriver.uws で変数の定義設定[DIM]付加のお願い / ahqiao
Ver 0.7.4 をUpしました。有難うございました。
No.1383 2021/10/09(Sat) 12:32:44
セレクタで文字がクリックできない / みつ
お世話になります。
IE から EDGE に UwscWebDriver を使用して移行を始めたのですが、
クリックする方法が分からない箇所がありましたのでご教授をお願いできますでしょうか。


# 質問

driver.FindElement("body > form > table:nth-child(4) > tbody > tr:nth-child(7) > td:nth-child(2) > font > b").CLICK()
または
driver.FindElementByXPath("/html/body/form/table[2]/tbody/tr[7]/td[2]/font/b").CLICK()

でクリックしたいのですが、クリックができません。
どのようにすればクリックできるようになるか教えて頂けないでしょうか。


# 目的

IE でクリックしていた箇所を EDGE で UwscWebDriver を使用しクリックを再現したいです。


# 実行したコード

call UwscWebDriver.uws //UwscWebDriver-0.7.2
driver = WebDriver.ChromiumEdge() //バージョン 94.0.992.31 (公式ビルド) (64 ビット)
driver.Navigate("https://xxx")

//?@
driver.FindElement("body > font > center:nth-child(6) > font > font").Click() ←ここは動く、これをクリックすると次の画面に遷移する

//?A
driver.FindElement("body > form > table:nth-child(4) > tbody > tr:nth-child(7) > td:nth-child(2) > font > b").CLICK() ←動かない
または
driver.FindElementByXPath("/html/body/form/table[2]/tbody/tr[7]/td[2]/font/b").CLICK() ←動かない



//開発者ツールでは以下の <b>JAPAN</b> 要素になります。

▶<head>...</head>
▼<frameset cols="175px,*">
▼#document
▼<html>
▶<head>...</head>
▶<body background="images/214.jpg" link="black" vlink="black" alink="black" oncontextmenu="return false">
▼<form name="form1">
▶<head>...</head>
▶<table cellspacing="0" cellpadding="0" width="150" height="60" border="1">
▼<table cellspacing="0" cellpadding="0" border="0">
▼<tbody><tr>
▶<tr>...</tr>
▶<tr>...</tr>
▶<tr>...</tr>
▶<tr>...</tr>
▶<tr>...</tr>
▶<tr>...</tr>
▼<tr>
▶<td nowrap="">...</td>
▼<td nowrap=""                           onmouseover="this.style.backgroundColor='Gold'" onmouseout="this.style.backgroundColor=''"
style="cursor: pointer;" onclick="parent.menu.location.href='menu.asp?GP=A'">
▼<font size="2">
  
<b>JAPAN</b> ←-------ここの文字をクリックしたい
</font>
         </td>
         以下省略


# うまく行かない点

?Aの両方試しましたが、どちらも COM エラーで止まってしまいます。


また、?@から?Aに遷移した時に以下のエラーがたまにでるのですが、エラー原因と回避方法が分かりましたら
ご教授頂けますでしょうか。
三回に一回ぐらいの割合でエラーになります。

「申し訳ございません。このページに到達できませんhttps://xxx の Web ページに問題が発生しているか、新しい Web アドレスに完全に移動された可能性があります。
ERR_UNEXPECTED」



お手数をお掛けしますが、よろしくお願い致します。

No.1369 2021/09/25(Sat) 12:53:06

Re: セレクタで文字がクリックできない / stuncloud
そもそもb要素がクリックに反応しないのが原因ではないかと思います
onclickがtdにあるので、b要素ではなく親のtd要素をクリックしてみてください

driver.FindElement("body > form > table:nth-child(4) > tbody > tr:nth-child(7) > td:nth-child(2)").CLICK()


エラーに関してはわかりません
?@と?Aのクリック処理の前にsleep()を入れるなどして様子を見てください
捜査対象が社内Webページ等でしたらその管理者にエラー内容を伝え相談してください

No.1370 2021/09/25(Sat) 14:57:49

Re: セレクタで文字がクリックできない / みつ
>onclickがtdにあるので、b要素ではなく親のtd要素をクリックしてみてください

driver.FindElement("body > form > table:nth-child(4) > tbody > tr:nth-child(7) > td:nth-child(2)").CLICK()
を試しましたができませんでした。

上記の selector 部は、開発者ツールの selector コピーで取得したものですが、よく確認すると該当ページの要素は左側 <frame src="menu.asp" name="menu"> と
右側 <frame src="default.asp" name="main"> の frame に分かれているので、正しくは以下かと思い試しましたがダメでした。

driver.FindElement("html > frameset > frame:nth-child(1) > html > body > form > table:nth-child(4) > tbody > tr:nth-child(7) > td:nth-child(2)").CLICK()



他の方の質問で stuncloudさんが No.1356 2021/09/05(Sun) 23:38:40 で以下のように回答されているのを見つけたのですがこの frame にあたるのでしょうか。


>そして気になった点
>> IE.document.frames("main").document.forms[0].username.value = cUserName
>を見るにframeを使ったページのようですね
>上で基本的に、と書きましたが例外もあり、frame操作は例外になります
>需要がなかろうということでframe対応をしていなかったためです
>(これはまあ、僕が機能を実装すれば出来るようになるんですが…)
>とは言えframe内のページを(URL直指定で)個別に開けばいくらでも操作可能ではあります




>捜査対象が社内Webページ等でしたらその管理者にエラー内容を伝え相談してください

社内Webなので管理者に確認してみます。
よく分かりますね。
なぜ社内Webだと分かるのですか?

No.1371 2021/09/26(Sun) 10:32:30

Re: セレクタで文字がクリックできない / stuncloud
> この frame にあたるのでしょうか。
そうです、近年ではframeが使われることがそもそもない(使用が推奨されない)ので未対応のままでした
対応を検討します

現状でどうにする方法もなくはないです
frame内ページも個別にURLがあるのでそれをnavigate()を使って別タブで開き操作する、という回避手段が使える場合があります
本来開かれるframeの名前で別タブを開けばほかのframeからの操作もそちらに反映されるような気がするんですよね
例えばframe1でボタン押下→frame2にページ展開
みたいな作りならframe2のフリをした別タブを作る、という発想です
(frame2の名前は変更しておく必要があります)
名前というのはnavigate()の第二引数に渡すもので、window.nameのことでもあります
targetの仕組みを逆手に取ってこちらの都合の良いようにするという話…なんですが説明難しいですね

> なぜ社内Webだと分かるのですか?
frame同様fontタグやbタグは過去の遺物なので使われるとしたらそういうところかな、という推理です

No.1372 2021/09/26(Sun) 12:12:18

Re: セレクタで文字がクリックできない / みつ
早速のご返信ありがとうございます。


>対応を検討します

心強いお言葉ありがとうございます。
是非、ご検討をお願い致します。


>frame内ページも個別にURLがあるのでそれをnavigate()を使って別タブで開き操作する、という回避手段が使える場合があります
>本来開かれるframeの名前で別タブを開けばほかのframeからの操作もそちらに反映されるような気がするんですよね


こちらも試してみます。


>frame同様fontタグやbタグは過去の遺物なので使われるとしたらそういうところかな、という推理です

さすがです。

いつも的確なご回答ありがとうございます。
まずは、freme を別タブで navigate() する方法を試してみます。

No.1373 2021/09/26(Sun) 14:35:02

Re: セレクタで文字がクリックできない / stuncloud
一応対応してみました
https://github.com/stuncloud/UwscWebDriver/wiki/driver%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88#switchframe
とりあえずAPIがあったので叩けるようにしたものです

1つ目のフレームは driver.SwitchFrame(0)
2つ目のフレームは driver.SwitchFrame(1)

といった感じで指定すれば良さそう…なんですがこちらで2つのフレームを持つページを作ってテストしたところ2つ目しか操作できませんでした
調査不足でよくわかりません
使えたら御の字くらいの気持ちでご利用ください

# そもそもFrame自体が非推奨なのでこの程度の対応になります、ご了承ください

No.1374 2021/09/26(Sun) 15:01:12

Re: セレクタで文字がクリックできない / みつ
速攻なご対応ありがとうございます。
以下の?Aを両方試してみましたが、「COM_Error:名前が不明です。」で止まってしまいましたが、動作保証対象外ということで了承しました。


call UwscWebDriver.uws //UwscWebDriver-0.7.2
driver = WebDriver.ChromiumEdge() //バージョン 94.0.992.31 (公式ビルド) (64 ビット)
driver.Navigate("https://xxx")

//?@
driver.FindElement("body > font > center:nth-child(6) > font > font").Click() ←動く、これをクリックすると次の画面に遷移する

//?A
戻り値 = driver.SwitchFrame(0) ← COM_Error
PRINT "FRAME1 " + 戻り値

戻り値 = driver.SwitchFrame(1) ← COM_Error
PRINT "FRAME2 " + 戻り値




>frame内ページも個別にURLがあるのでそれをnavigate()を使って別タブで開き操作する、という回避手段が使える場合があります
>本来開かれるframeの名前で別タブを開けばほかのframeからの操作もそちらに反映されるような気がするんですよね
>例えばframe1でボタン押下→frame2にページ展開
>みたいな作りならframe2のフリをした別タブを作る、という発想です
>(frame2の名前は変更しておく必要があります)
>名前というのはnavigate()の第二引数に渡すもので、window.nameのことでもあります
>targetの仕組みを逆手に取ってこちらの都合の良いようにするという話…なんですが説明難しいですね



以下で上手く右側の frame に移動することができました。
しかし、移動後の画面も SetValue や ボタン押下ができない為、UWSC関数で対応したいと思います。

driver.Navigate("https://xxxA","menu")
driver.Navigate("https://xxxB","main")

また、GetSourceで、ほしい「フレームソース」ではなく、「ページのソース」が取得されてしまいますので、UwscWebDriver上でフレームソース を取得する方法はないでしょうか。
どうにもならない場合は、CHKIMG等で無理やり取得したいと思います。

よろしくお願い致します。

No.1375 2021/09/26(Sun) 23:05:52

Re: セレクタで文字がクリックできない / stuncloud
> 「COM_Error:名前が不明です。」で止まってしまいました
すいません書き忘れてました
0.7.3が出てるのでそれを使ってください

> フレームソース を取得する方法はないでしょうか。
フレームソースとは何のことを指しているのでしょうか?

モジュールの機能だけでは得られないデータについては
・ExecuteScript()を使ったJavaScriptによる取得
を検討してみてください

No.1376 2021/09/27(Mon) 00:48:27

Re: セレクタで文字がクリックできない / みつ
ご連絡が遅くなりすみません。


>0.7.3が出てるのでそれを使ってください

失礼しました。
0.7.3 のダウンロード先が分からなかったので、以下の内容を UwscWebDriver.uws にコピペしたところ
driver.SwitchFrame()は無事に動きましたが、その後の driver.FindElement(selector).Click() は動きませんでした。

https://github.com/stuncloud/UwscWebDriver/blob/31a28c0080d218384ba2e1821be87825efd7f8b4/UwscWebDriver.uws

?@
戻り値 = driver.SwitchFrame(0)
PRINT "FRAME1 " + 戻り値

?A
戻り値 = driver.SwitchFrame(1)
PRINT "FRAME2 " + 戻り値


そこでご教授頂きたいのですが、上記?@の動作で frame を合わせて、その後に driver.FindElement(selector).Click() で
?@の frame の要素をクリックするという認識でよろしかったでしょうか。

また、その場合の selector は、開発者ツールの selector コピーで取得したもの(下の?B)を指定すれば動くという認識でよろしかったでしょうか。
それとも frame の頭の部分(下の?C)を繋げての指定になるのでしょうか。

どちらも試しましたが動きませんでした。

?B
driver.FindElement("body > form > table:nth-child(4) > tbody > tr:nth-child(7) > td:nth-child(2)").Click()

?C
driver.FindElement("html > frameset > frame:nth-child(1) > html > body > form > table:nth-child(4) > tbody > tr:nth-child(7) > td:nth-child(2)").Click()



>フレームソースとは何のことを指しているのでしょうか?

フレームの html ソースのことです。


>・ExecuteScript()を使ったJavaScriptによる取得を検討してみてください

承知しました。こちらでのソース取得を試してみます。



お忙しいところすみませんが、よろしくお願い致します。

No.1377 2021/09/27(Mon) 21:08:54

Re: セレクタで文字がクリックできない / stuncloud
> 0.7.3 のダウンロード先が分からなかったので
失礼しました、タグのpushもリリースもし忘れていました…
こちらでダウンロードできます
https://github.com/stuncloud/UwscWebDriver/releases/tag/0.7.3

> 上記?@の動作で frame を合わせて、その後に driver.FindElement(selector).Click() で
?@の frame の要素をクリックするという認識でよろしかったでしょうか。
よろしいはず…なんですが、こちらでも1つ目のフレーム(SwitchFrame(0))の操作ができなかったのでなにかやり方が間違っている、または不足しているのかもしれません
如何せん細かい情報がないのでよくわからないのです
SwitchFrame(0)自体は成功するんですけどね…

> また、その場合の selector は、開発者ツールの selector コピーで取得したもの(下の?B)を指定すれば動くという認識でよろしかったでしょうか。
> それとも frame の頭の部分(下の?C)を繋げての指定になるのでしょうか。

?Bの書き方で良いはず…です
こちらで操作できたフレームはそのようにしていました

フレーム内の操作についてもJavaScriptでできるかもしれないです
各フレームへのアクセスについては以下を参照してください
(この場合SwitchFrame()はしないほうが良いです)

https://developer.mozilla.org/ja/docs/Web/API/Window/frames

No.1378 2021/09/27(Mon) 23:06:48

Re: セレクタで文字がクリックできない / みつ
>こちらでダウンロードできます

ご対応頂きありがとうございました


>フレーム内の操作についてもJavaScriptでできるかもしれないです
>各フレームへのアクセスについては以下を参照してください
>(この場合SwitchFrame()はしないほうが良いです)


承知しました。
JavaScript を勉強して試してみます。

ありがとうございました。

No.1379 2021/09/28(Tue) 10:39:00
IEからEDGEではまっています。 / ながいも
IEからEdgeへの置き換えでお教えください。
これまで通常に動いていた治具パソコンが急遽下記のエラーが発生するようになりました。
until ( ! ie.busy ) and ( ie.readystate = 4
恐らくはIEからEDGEに標準ブラウザを置き換えられたためかと思います。

そこで応急処置を施したいのですが
コンパネで標準ブラウザをIEに設定しなおしてもクロスケーブルで接続している基板を見に行こうとした際にEDGEに接続され上記COMエラーが発生してしまいます。

IE="(C:*****:edge)"と定義しても多分ダメですよね?
短時間で切り替えられる方法があればお教えください。
何卒よろしくお願いいたします

No.1365 2021/09/21(Tue) 12:40:00

Re: IEからEDGEではまっています。 / stuncloud
> IE="(C:*****:edge)"と定義しても多分ダメですよね?
ダメです

> 短時間で切り替えられる方法があればお教えください。
今までの資産を活かしつつ、比較的短時間で移行 **できるかもしれない** 方法は一応あります

ステップ1: 捜査対象サイトをEdgeのIEモードで開きます

EdgeのIEモードで開いているサイトであれば外部からCOMオブジェクトとして掴むことができます
IEモードによるサイトの開き方は別途お調べください
# ローカル環境であれば設定からurlを指定できます
# Active Directory配下のPCであればグループポリシーによる操作が必要になる?みたいです

ステップ2: IEモードで開かれたページをCOMオブジェクトとして取得する

https://junjun777.hatenablog.com/entry/20120212/uwsc_hwnd_ie_object

こちらを参照ください
以下のような使い方になります

call ie_getObject.uws

dim wid = GETID("- Microsoft​ Edge", "Chrome_WidgetWin_1")
dim ie = IeObject.Get(wid)
if ie = 0 then
 msgbox("IEモードの取得失敗")
endif

msgbox(ie.document.url) // urlを表示

# このieオブジェクトはInternetExplorer.Applicationのそれとは若干異なります


大幅な改修が必要になりますがUwscWebDriverを使うという方法もあります
https://github.com/stuncloud/UwscWebDriver

No.1366 2021/09/21(Tue) 15:25:53

Re: IEからEDGEではまっています。 / しろまさ
> コンパネで標準ブラウザをIEに設定しなおしてもクロスケーブルで接続している基板を見に行こうとした際にEDGEに接続され上記COMエラーが発生してしまいます。

とりあえず↑これの対策
https://samurai-computer.com/how-to-stop-force-stwitching-internet-explorer-to-microsoft-edge/

No.1367 2021/09/22(Wed) 14:05:18

Re: IEからEDGEではまっています。 / ながいも
stuncloudさんしろまささん
ご回答いただきありがとうございました。
ワクチンの副反応で苦しんで中催促ばかりされるため取り急ぎの対策として
pcを復元ポイントで使えていたころまで戻し、オフラインで利用をさせ
年内にedge対応プログラムを作成しようかと思います。
ieとedgeは別物と考えUWscwebDriverを利用した新規設計にしようとおもいます。

No.1368 2021/09/23(Thu) 16:49:21
name属性が被ってしまった場合のvalueでの指定の仕方を教えて頂きたいです。 / kenken
管理人様お忙しい所失礼致します。

IEでUWSCを使用しておりましたがIEが使えなくなるのでEdgeに変更して作業を行いたいと思っております。

こちらの掲示板をご用意して頂けている事に感謝申し上げます。

お忙しい所大変恐縮ですが質問をさせてください。

-----------
●質問
-----------
call UwscWebDriver.uws

driver = WebDriver.Edge()

でEdgeを起動させた際に

<label><input type="radio" name="sex_cd" value="none" checked="checked"> 指定しない</label>
<label><input type="radio" name="sex_cd" value="0"> 男性</label>
<label><input type="radio" name="sex_cd" value="1"> 女性</label>

上記のようにname属性が被ってしまうためvalueで男性等を指定したいのですが、どうすればいいのでしょうか?


-----------
●目的
-----------
男性のラジオボタンにチェックを入れたい

submit = driver.FindElement("input[name=<#dbl>sex_cd")//
submit.Click()
Sleep(2)

これだと性別を指定しないになる為にvalueで性別を指定したいです

-----------
●試したコード
-----------
?@
submit = driver.FindElement("input[name=<#dbl>sex_cd,"0"]")// 男性
submit.Click()
Sleep(2)

?A
submit = driver.FindElement("sex_cd","value='0')// 男性
submit.Click()
Sleep(2)

お忙しい所大変恐縮ですがご教授頂けると幸いです。

No.1362 2021/09/14(Tue) 23:30:28

Re: name属性が被ってしまった場合のvalueでの指定の仕方を教えて頂きたいです。 / stuncloud
だいたい以下のようなやり方でできるはずです
# コードは動作確認してないので間違いがあったらごめんなさい
# でも考え方のヒントにはなると思います

案1: for-inしてvalueが一致したらクリック

selector = "input[name=<#dbl>sex_cd<#dbl>]"
for elem in driver.FindElements(selector) // FindElementsだと該当するものを配列で返す
 if elem.GetAttribute("value") = 0 then
  elem.Click()
  break
 endif
next

案2: セレクタでvalueも指定

// valueもattributeなので多分これでもできる
textblock male
input[name="sex_cd"][value="0"]
endtextblock

driver.FindElement(male).Click()

No.1363 2021/09/15(Wed) 00:47:04

Re: name属性が被ってしまった場合のvalueでの指定の仕方を教えて頂きたいです。 / kenken
早速の回答ありがとうございます。

教えて頂いた二つのコードはどちらも動きました!

これで一気に作業が進みます。

お忙しい中ありがとうございました。

No.1364 2021/09/15(Wed) 07:51:36
IEで実現していたパスワード入力の自動化は、Edge+WebDriverで対応できるのでしょうか? / maco
UWSC 仮 掲示板 管理人様・ご利用される皆様

初の投稿をさせていただきます。macoです。
質問させてください。


社内の標準ブラウザがEdgeに代わります。

その際、WebDriverを利用すればパスワード入力の自動化が継続利用できるのか知りたいと思います。
WebDriverを利用し、以下のソースを最大活用した対応はできるのでしょうか?

たとえば、以下のuwsソースにて、

// 起動したIEを取得
IE = GETACTIVEOLEOBJ("InternetExplorer.Application", "ログイン認証ページ")

上記のIE代入処理を、WebDriverのオブジェクトに置換するよいのでしょうか?
それとも、WebDriverの場合は全く別の方法に変更が必要なのでしょうか?

社内Webごとにパスワード入力画面があり、それ用のuwsファイルを複数用意しています。
それらのEdge対応は、小修正ですむのか、作り直し規模が要るのか把握したく、お知恵を拝借させてください。

小修整の場合は、事例をいただけるとそれを他のuwsにも反映させたいと思います。
お忙しいと思いますが、よろしくお願いいたします。



IEで利用しているuwsソース
――――――――――――――――――――――――
CALL common.uws // CALL "common.uws" でも良い

// 起動したIEを取得
IE = GETACTIVEOLEOBJ("InternetExplorer.Application", "ログイン認証ページ")

// IEの表示を待つ
While IE.Busy OR IE.readyState <> 4
SLEEP(0.1)
WEnd

// ユーザ名・パスワードを入力し反映
IE.document.frames("main").document.forms[0].username.value = cUserName
IE.document.frames("main").document.forms[0].password.value = cPassword
IE.document.frames("main").document.forms[0].submit()
――――――――――――――――――――――――
Edgeバージョン
バージョン 92.0.902.73 (公式ビルド) (64 ビット)

――――――――――――――――――――――――
用意したWebDriver
https://msedgewebdriverstorage.z22.web.core.windows.net/?prefix=92.0.902.73/

No.1355 2021/09/05(Sun) 20:54:52

Re: IEで実現していたパスワード入力の自動化は、Edge+WebDriverで対応できるのでしょうか? / stuncloud
WebDriverについて知りたいとのことですが、UWSCからの利用を想定してUwscWebDriver利用時の状況を説明します

これです
https://github.com/stuncloud/UwscWebDriver

基本的に同じ操作は出来ますが、IE用コードの使い回しは出来ません
すべて書き直しが必要になります

そして気になった点
> IE.document.frames("main").document.forms[0].username.value = cUserName
を見るにframeを使ったページのようですね
上で基本的に、と書きましたが例外もあり、frame操作は例外になります
需要がなかろうということでframe対応をしていなかったためです
(これはまあ、僕が機能を実装すれば出来るようになるんですが…)
とは言えframe内のページを(URL直指定で)個別に開けばいくらでも操作可能ではあります

あとGETACTIVEOLEOBJ相当のものがないです
つまりすでに起動しているブラウザを操作するすべがありません
(UwscWebDriverから起動したブラウザであれば後から再接続して操作することは可能なのですが)

というわけで
今のところUwscWebDriverで代替するのはmacoさんにとっては厳しい選択になるやもしれません
学習や実装に十分な時間が得られないのであれば難しいかと想います

とは言えこの結論だとあんまりなので、UwscWebDriver以外の手段も考えてみましょう
先ずは、今までの資産(IE用コード)の活用できる可能性がもしかしたらあるかも、という話をします

MS Edgeの『IEモード』を使って社内Webページを開くというのであれば、そのオブジェクトを外部から掴めるかもしれません
以前しゅんさんが書かれたこれ
https://junjun777.hatenablog.com/entry/20120212/uwsc_hwnd_ie_object
ですね
(まあこれもIHTMLDocument2なのでいわゆるIEオブジェクトと呼んでるやつとは異なるので多少コードが変わる可能性あり)
(あと実際試したことがないのでこの方法は使えないかもということは留意しといてください)

さて、最後に身もふたもない手段の話です!

MS Edgeであればログイン情報の保存と自動入力が可能なので
> パスワード入力の自動化
「だけ」が目的であればそれを使うのも手です
(むしろその方が楽だと思うのでこれが本命)

No.1356 2021/09/05(Sun) 23:38:40

Re: IEで実現していたパスワード入力の自動化は、Edge+WebDriverで対応できるのでしょうか? / maco
stuncloud様
返信、ありがとうございます。

>> パスワード入力の自動化
> 「だけ」が目的であればそれを使うのも手です(むしろその方が楽だと思うのでこれが本命)


実は、社内用のEdgeはパスワード保存が無効化されているのです。
万一を想定し、石橋を叩いて渡る対策、とのことでした……。



> 基本的に同じ操作は出来ますが、IE用コードの使い回しは出来ません
> すべて書き直しが必要になります
>
> そして気になった点
>> IE.document.frames("main").document.forms[0].username.value = cUserName
> を見るにframeを使ったページのようですね
> 上で基本的に、と書きましたが例外もあり、frame操作は例外になります



22年9月まではIEが使えると思います。
また、イントラ専用としてならIE起動はできるのかな、と淡い希望を抱いています。

上記を見て、勉強していきたいと思います。ありがとうございました。

No.1358 2021/09/07(Tue) 16:43:01

Re: IEで実現していたパスワード入力の自動化は、Edge+WebDriverで対応できるのでしょうか? / maco
stuncloud様・皆さま

以下のように対応しました。参考になれば。

Edgeの場合(指定ウィンドウの起動を検出したものの、IEオブジェクトを取得できない=Edgeが起動した)は、vbsを起動しパスワード設定(common.uws)を読み込み、SendKeysでユーザ名・パスワードを打ち込む。としました。

SendKeys利用のため、Edgeウィンドウにフォーカスが当たっていなければ失敗する可能性もあります。

ただ、もともとUWSCのスケジュール設定で、指定文字列のウィンドウが起動したときに、uwsファイルを実行するようにしていましたので、ほぼ問題になることはありません。


参考ソース
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
CALL common.uws  // CALL "common.uws" でも良い

Try
  // 起動したIEを取得
  IE = GETACTIVEOLEOBJ("InternetExplorer.Application", "Web Single Sign On")

  // IEの表示を待つ
  While IE.Busy OR IE.readyState <> 4
    SLEEP(0.1)
  WEnd

  IE.document.frames("main").document.forms[0].username.value = cUserName
  IE.document.frames("main").document.forms[0].password.value = cPassword
  IE.document.frames("main").document.forms[0].submit()
Except
  Exec("wscript SendKeys.vbs")
EndTry


SendKeys.vbsのイメージ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Dim objWS: Set objWS = CreateObject("WScript.Shell")

id = ユーザ名 読み込み処理
pw = パスワード 読み込み処理

objWS.SendKeys(id)
objWS.SendKeys("{TAB}")
objWS.SendKeys(pw)
objWS.SendKeys("{ENTER}")

No.1359 2021/09/13(Mon) 18:32:24

Re: IEで実現していたパスワード入力の自動化は、Edge+WebDriverで対応できるのでしょうか? / stuncloud
vbsの部分もUWSCで出来ますよ
(SendKeysもできるし、組み込みのkbd()でも良い)

No.1360 2021/09/13(Mon) 20:59:18

Re: IEで実現していたパスワード入力の自動化は、Edge+WebDriverで対応できるのでしょうか? / maco
> vbsの部分もUWSCで出来ますよ
> (SendKeysもできるし、組み込みのkbd()でも良い)


stunclound様、ありがとうございます。
以下のように変更することで、vbsが不要になりました。

Repeat〜Untilは、SendKeysでの入力失敗を想定しています。

−−−−−−−−−−−−−−−−−−−−−−−−−−
CALL common.uws // CALL "common.uws" でも良い


Const cTitle = "Web Single Sign On"

Try
 // 起動したIEを取得
 IE = GETACTIVEOLEOBJ("InternetExplorer.Application", cTitle)

 // IEの表示を待つ
 While IE.Busy OR IE.readyState <> 4
  SLEEP(0.1)
 WEnd

 IE.document.frames("main").document.forms[0].username.value = cUserName
 IE.document.frames("main").document.forms[0].password.value = cPassword
 IE.document.frames("main").document.forms[0].submit()
Except
 Dim objWS = CREATEOLEOBJ("Wscript.Shell")
 Repeat
  Sleep(cSleepSec)
  objWS.SendKeys("{DELETE}")
  objWS.SendKeys(cUserName)
  objWS.SendKeys("{TAB}")
  objWS.SendKeys(cPassword)
  objWS.SendKeys("{ENTER}")
 Until GETID(cTitle) = -1
EndTry

No.1361 2021/09/14(Tue) 12:11:43
mp3ファイルの各種情報の操作 / riu
mp3ファイルの長さの取得と、タグ情報の歌詞取得と編集方法が、
ヘルプをみてもわかりません。
どうすればいいか教えていただけないでしょうか。
pro版5.3.0.2を使っています。
タイムスタンプの自動挿入を考えているのですが、
出だしで躓いているのでコードを記すことができません。
どうぞよろしくお願いします。

No.1344 2021/08/31(Tue) 00:13:51

Re: mp3ファイルの各種情報の操作 / stuncloud
id3を使います
(僕はこれを使ってPowerShellでmp3の歌詞読み取りをやりました)

http://id3lib.sourceforge.net/

COM版があるようなのでそれを使えばcreateoleobjできるようになるはず

…よく見たらid3lib-3.8.3.zipの中にid3comがあるけど自分でビルドして登録しないといけないようですね…
win32.readme.first.txtに手順は書いてありますが…
ちょっと敷居高いな

# PowerShellならC#用のライブラリを使えば簡単にできます

No.1345 2021/08/31(Tue) 01:34:07

Re: mp3ファイルの各種情報の操作 / stuncloud
出どころ不明なid3com.dllを入手し試してみましたが正常に動作しませんでした

cddbcontrol.dllというのでもできそうなのですが、こちらも正規のダウンロード元が見つからず試せていません
このdllを同梱してるフリーソフトというのもあるようですが、それがなにかわかりませんでした
サンプルコードなら見つかります
https://www.motobit.com/tips/detpg_change-id3-tags-script/

No.1346 2021/08/31(Tue) 12:33:46

Re: mp3ファイルの各種情報の操作 / stuncloud
まだ見てるかな?
ちょっとDLLを作ってみました

https://drive.google.com/file/d/1-6M-I3AQ8soHB93AGnK6HAGNKWEBq_-6/view?usp=sharing

id3lyrics.zipというファイルです (sha256: 8F11896230FD0C526EFCD9E2E4B8EE832F93ECBCF670874EEB07B55A0FA1E078)
中身はid3lyrics.dllです

## 使い方

def_dll get_lyrics(wstring, var wstring, uint):uint:id3lyrics.dll
def_dll set_lyrics(wstring, wstring, wstring, wstring):uint:id3lyrics.dll

// 歌詞を見る

path = path\to\your.mp3
buffer = format(chr(0), 5000) // 歌詞を受け取るバッファ、サイズがわからんので大きめに
print get_lyrics(path, buffer) // 実際の歌詞(Unicode文字列)のサイズを返す
print buffer

// 歌詞をセット

textblock lyrics
[00:01.500]ほげほげ
[00:03.000]ふがふが
[00:05.000]ぴよぴよ
[00:06.500]ぽよ
endtextblock

set_lyrics(path, lyrics, "ja", "test") // ファイルパス、歌詞、言語、説明を渡す

## 補足

id3v2.3で書き込んでいます
同期歌詞というのも書き込めるようですが今回は実装していません

No.1354 2021/09/04(Sat) 18:51:05

Re: mp3ファイルの各種情報の操作 / riu
1です。今9/4に入ったものを確認しました。
丁寧な対応に痛み入ります。
最初の返信をみて、id3なるものを少しみてみましたが、
おっしゃるとおりで私には敷居の高いものでした。
ですので、少し時間をかけて理解しようと努めてみたのですが、
やはり難しい(時間を取りにくいと言うことも含め)ものでした。
そこで、お礼の書き込みだけでもさせて頂こうと思った矢先、
最後の返信を見つけた次第です。
今からそこを吟味させて頂こうと思います。
取り急ぎお礼まで。
しばらくかかると思いますが、また必ず書き込みに伺います。

No.1357 2021/09/07(Tue) 11:46:00
FindElementsオブジェクトに含まれるname、htmlの取得方法 / nyoshikawa
ie終了宣言から、やっとこちらにたどり着きました。uwscという素晴らしいツール、それに加えてuwsc webdriverを知り、既存のIE自動化部分をMS edge(chrome)対応しようと考えています。
早速ですが、
elements = driver.FindElements(...) で捉えたelements(配列?)オブジェクトの参照の仕方が分からず立ち往生しています。

elements = driver.FindElements(...)
msgbox(length(elements)) //1以上を確認
for EL in elements
szNAME = EL.getattribute(''name'') //これは取得できています。
szHTML = EL.getattribute(''outerHTML'') //使えますか?
 print szNAME + '' : '' + szHTML
next

length(elements)で1以上を確認はできていますが欲しいのは、その後、各elementの要素のnameとouterHTML(HTML文)を取得、列挙したいのですがnameしか取得できていません。outerHTML(HTML文)はどの様にすれば良いか、ご教授願えればありがたいです。参考にすべきURL、サンプルでも構いません。突然ですがよろしくお願いします。
p.s. uwsc webdriverは素晴らしいと思います。陰ながら応援させて頂きます。

No.1347 2021/09/01(Wed) 17:37:47

Re: FindElementsオブジェクトに含まれるname、htmlの取得方法 / stuncloud
JavaScriptを実行して取得できます

https://github.com/stuncloud/UwscWebDriver/wiki/driver%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88#ExecuteScript

サンプルコードでもouterHTML取ってますね


for EL in elements
 args = WebDriver.CreateJSArray()
 args.push(EL.raw())
 szHTML = driver.ExecuteScript("return arguments[0].outerHTML;", args)
 print szHTML
next

こんな感じで取れると思います

# 引数渡す仕組みがめんどうなのでどうにかしたいですね

No.1348 2021/09/01(Wed) 21:20:19

Re: FindElementsオブジェクトに含まれるname、htmlの取得方法 / nyoshikawa
stuncloudさま。速攻レスに深く感謝いたします。<(_ _)>

args = WebDriver.CreateJSArray()から...中略....
szHTML = driver.ExecuteScript("return arguments[0].outerHTML;", args)で
確認できました。

elements.getattribute("属性の名前") はHTMLに実際に表記されている属性名しかダメなのか、どうか、なかなか情報が少ないのでこの4日間ずっと苦労しているところでした。やっと、outerHTMLの試行錯誤のトンネルから脱出できました。

仮掲示板あって本当に助かりました。ありがとうございます。

No.1349 2021/09/01(Wed) 22:03:19

Re: FindElementsオブジェクトに含まれるname、htmlの取得方法 / stuncloud
> # 引数渡す仕組みがめんどうなのでどうにかしたいですね

対応しました
https://github.com/stuncloud/UwscWebDriver/releases/tag/0.7.2
これでやや楽に書けます

elem = driver.FindElement(selector)
outerHtml = driver.ExecuteScript("return arguments[0].outerHTML;", JS.Args(elem.raw()))

No.1350 2021/09/02(Thu) 11:59:23

Re: FindElementsオブジェクトに含まれるname、htmlの取得方法 / nyoshikawa
> > # 引数渡す仕組みがめんどうなのでどうにかしたいですね
> 対応しました
> https://github.com/stuncloud/UwscWebDriver/releases/tag/0.7.2
> これでやや楽に書けます
> elem = driver.FindElement(selector)
> outerHtml = driver.ExecuteScript("return arguments[0].outerHTML;", JS.Args(elem.raw()))


早々にバージョンアップ、ありがとうございます。
IE自動化で、既存の処理で、document.title や element.outerHTML, element.tagName は頻繁に使ってい経緯から、記述ミス防止のため、関数でカプセル化して短い記述で済む様にしようと思います。
driver.ExecuteScriptを使わずに取得できる項目と使わないとダメな項目の整理表があれば、良いかも知れません。未だにごっちゃ煮状態ですが、宜しくお願い致します<(_ _)>

No.1351 2021/09/02(Thu) 19:10:52

Re: FindElementsオブジェクトに含まれるname、htmlの取得方法 / stuncloud
> ExecuteScriptを使わずに取得できる項目と使わないとダメな項目
GetAttribute()で取れるのはその名の通りattributeなのでそうじゃないものは取れません
そこはHTMLの知識なのでさすがにご自身で勉強していただきたいかな

No.1352 2021/09/02(Thu) 20:18:00

Re: FindElementsオブジェクトに含まれるname、htmlの取得方法 / nyoshikawa
> > ExecuteScriptを使わずに取得できる項目と使わないとダメな項目
> GetAttribute()で取れるのはその名の通りattributeなのでそうじゃないものは取れません
> そこはHTMLの知識なのでさすがにご自身で勉強していただきたいかな


stuncloudさんのおっしゃるのはごもっともなお話しです。
緊急を要する目先の作業に追われ、体系立った事が
分かっていないのが原因ですが、自身で習得に励みます。<(_ _)>

No.1353 2021/09/03(Fri) 12:44:44
IEでボタン押したい / rin
getElementByIdやIESETDATAで下記のコードのボタンを押そうと思っているんですがどうもうまくいきません。座標を直接指定して押す以外で何か方法はありませんか?

<div class="text-center" style="margin-top: 20px;margin-bottom:0px">
<div class="btn btn-success ToNext">次へ</div>
</div>

失敗コード
DIM element = IE.document.getElementById("btn btn-success ToNext")
element.item(0).click()

IESETDATA(IE,True, "class=btn btn-success ToNext")

No.1341 2021/08/29(Sun) 20:36:15

Re: IEでボタン押したい / stuncloud
// querySelectorでcssセレクタを指定
element = IE.document.querySelector("div.btn.btn-success.ToNext")
element.click()

No.1342 2021/08/30(Mon) 01:43:45

Re: IEでボタン押したい / rin
動きました!
本っ当にありがとうございます!

No.1343 2021/08/31(Tue) 00:09:42
SetValue()の入力値に関して / sige
SetValue("abc123")など半角英数は問題なくセットされるのですが
SetValue("全角")を実行すると「チエウム」とセットされます。
色々検索してみたのですが文字制限に関しては見当たらなく
基本的な事なのかもしれませんが全角文字のセット方法を
御教授願えたらと思います。
ブラウザーはEdge Ver92.0.902.84
UwscWebDriverは0.7.1

No.1335 2021/08/29(Sun) 10:18:33

Re: SetValue()の入力値に関して / stuncloud
> SetValue("全角")を実行すると「チエウム」とセットされます。
再現しません
こちらのテスト環境では「全角」と入力されます

以下を可能な限り教えて下さい

・現象が再現するサイトのURL
・SetValueを行った対象エレメント

No.1336 2021/08/29(Sun) 12:34:57

Re: SetValue()の入力値に関して / sige
ご確認ありがとうございます。
driver.Navigate("http://top.hange.jp/login/?nexturl=http%3A%2F%2Fcasual.hange.jp%2Fchocotto%2Findex&kind=chocotto")
Sleep(1)
id="全角"
with driver.FindElement("#strmemberid")
.Clear()
.SetValue(id)
endwith
です。
ちなみにhttps://github.com/stuncloud/UwscWebDriver
sample2.uwsを実行すれば「やまだたろう」は入力されました
お忙しい所、申し訳ありませんが宜しくお願いします。

No.1337 2021/08/29(Sun) 13:06:19

Re: SetValue()の入力値に関して / stuncloud
> driver.Navigate("http://top.hange.jp/login/?nexturl=http%3A%2F%2Fcasual.hange.jp%2Fchocotto%2Findex&kind=chocotto")
> Sleep(1)
> id="全角"
> with driver.FindElement("#strmemberid")
> .Clear()
> .SetValue(id)
> endwith


これをそのまま試してみましたが、正常に「全角」と入力されました

MS Edge 92.0.902.84
MSEdgeDriver 92.0.902.9
で動作確認しています


該当サイトのエンコーディングが
> charset="shift_jis"
となっていたのでそのせいなのかな?とも思いましたがこちらでは特に問題なかったのでちょっとわかりません

id = encode("全角", CODE_ANSI) // sjisにする

で改善されるか試してもらえますか?

No.1338 2021/08/29(Sun) 15:38:29

Re: SetValue()の入力値に関して / sige
ご連絡有難う御座いました。
結果から申し上げますと解決いたしました。
やってみた事の経緯を書きます
1,id = encode("全角", CODE_ANSI) // sjisにする
 結果 改善されず
2,MSEdgeDriver 92.0.902.84→MSEdgeDriver 92.0.902.9に変更
 結果 改善されず
3,PC再起動して実行
 結果 改善されず
4,別のPCで実行
 結果 改善されず
ここまでやっても改善されず途方に暮れていたのですが
スクリプトファイルを編集しているテキストエディターの
モードが通常 日本語(シフトJIS)なのが日本語(EUC)に変わって
いたのに気づき日本語(シフトJIS)に変更保存し実行した所
改善されました。
補足ですが
id = encode("全角")でも
MSEdgeDriver 92.0.902.84でも
問題ありませんでした。
私の不手際で時間を費やして頂き大変ご迷惑をおかけしました。
また解らない事ありましたらこれに懲りずに御教授願います。

No.1339 2021/08/29(Sun) 17:39:19

Re: SetValue()の入力値に関して / stuncloud
ああなるほど…!
一応スクリプトファイルのエンコードもsjisやUTF8で差があるか確認してはいたんですが、まさかのeuc-jp…!
おそらくUWSC内部でも「チエウム」として認識されてたのだと思われます

蛇足ですが、旧Edgeだと半角カタカナが文字化けするという(webdriverの)不具合があったので、それと組み合わさっていたらと思うとゾッとしますね…!多分原因にたどり着けない…!

No.1340 2021/08/29(Sun) 19:13:11

以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
200/200件 [ ページ : << 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 20 >> ]

- HOME - お知らせ(3/8) - 記事検索 - 携帯用URL - フィード - ヘルプ - メール - 環境設定 -

- Skin: Modern v2.0 - Author: ロケットBBS -

Rocket Board Type-X (Free) Rocket BBS