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

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

downup / seen
お世話になります。
記録ボタンでは、クリックと押下と押上の状態をそれぞれ
BTN(LEFT,CLICK,1591,257,109)
BTN(LEFT,DOWN,1591,257,219)
BTN(LEFT,UP,1591,257,593)
と取得できるのですが、マウスホイールの操作は仕様のようで、記録できません。
同じように、GETKEYSTATEでは、クリックがあったことしか知れません、クリックと押下と押上の状態を区別して取得、あるいは、マウスホイールの位置を取得する別の方法をご存知の方はいらっしゃいますでしょうか。

No.1445 2022/02/14(Mon) 12:33:00

Re: downup / stuncloud
メッセージループを書いてGetMessageA等でWM_MOUSEWHEELやWM_KEYDOWN、WM_KEYUPのメッセージが拾えればホイールの移動量やマウスボタンの状態は取れると思います
それをスクリプトにどう組み込むか?はちょっと難しそうですが

No.1446 2022/02/14(Mon) 20:23:29

Re: downup / seen
ありがとうございます、簡単にできないことがわかりました。
同じように、以下、2つのキーを同時押されたことだけであれば取得できたのですが、2つのキーを同時押されたこととそうでないことを区別できませんでしたので、このソフトではこれも区別する方法がなくできないということになりますでしょうか。
  Ifb GETKEYSTATE(VK_CTRL) and GETKEYSTATE(VK_C)
MsgBox("OK")
  elseif GETKEYSTATE(VK_CTRL)
MsgBox("x")
  elseif GETKEYSTATE(VK_C)
MsgBox("x")
endif

No.1447 2022/02/15(Tue) 14:06:08

Re: downup / stuncloud
modキー込みであればsethotkey()を使うという方法があります

sethotkey(VK_C, MOD_CONTROL, "ctrl_c")
sleep(10)
procedure ctrl_c
 msgbox("ctrl+cが押されました")
fend

それと
> GETKEYSTATEでは、クリックがあったことしか知れません、クリックと押下と押上の状態を区別して取得
について確認してみました
例えば左クリックなら、その都度getkeystate(VL_LBUTTON)を呼べば
・TRUEなら押されている
・FALSEなら押されていない
ことがわかります
getkeystate()を使ってください

あとついでに
> メッセージループを書いてGetMessageA等でWM_MOUSEWHEELやWM_KEYDOWN、WM_KEYUPのメッセージが拾えれば
もやってみましたが
・WM_MOUSEWHEELは拾える (ので計算すれば回転量はわかる)
 ・回転検出時のマウス座標や押されていたキー情報なども付随してくる
・WM_KEYDOWN、WM_KEYUPは拾えなかった
という結果になりました
ホイール回転量についてはこちらの方法でなんとかなりそうですね

No.1448 2022/02/15(Tue) 17:13:51

Re: downup / stuncloud
マウスホイールの回転を検出するサンプル

def_dll GetMessageA(var dword[], hwnd, dword, dword):int:user32
def_dll DispatchMessageA(var dword[]):int:user32
const WM_MOUSEWHEEL = $020A

dim msg[6] // hwnd, message, wParam, lParam, time, pt, lPrivate
logprint(true)
id = getid(GET_LOGPRINT_WIN)
while status(id, ST_VISIBLE)
 GetMessageA(msg,0,0,0)
 select msg[1]
  case WM_MOUSEWHEEL
   wparam = msg[2]
   lparam = msg[3]
   print (wparam and $FFFF0000) / $10000 // 回転情報
   print wparam and $FFFF // 一緒に押されたキー
   print
  default
 selend
 DispatchMessageA(msg)
wend
// 詳しくは https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-mousewheel

No.1449 2022/02/15(Tue) 17:25:51

Re: downup / seen
ありがとうございます。
その都度getkeystate(VL_LBUTTON)を呼べば確かに、
・TRUEなら押されている
・FALSEなら押されていない
ことがわかりますが、押さなければ、常にFALSEとなるため、VL_LBUTTONとVL_RBUTTONの区別すらできない、押せばクリックと押下の区別ができないとなってしまいます、こちらのやり方、認識がどこか違っているのかとも思いますがいかがでしょうか。

No.1450 2022/02/15(Tue) 23:49:44

Re: downup / stuncloud
右ボタンの判定なら
getkeystate(VK_RBUTTON)
呼べばいいだけの話ですよね?

クリックか押し込みの判定も例えば一秒の間に複数回getkeystateを呼んで
・すべてTRUEなら押し込み
・FALSEになったらクリック
みたいに判定すればいいんじゃないですか?

> こちらのやり方、認識がどこか違っているのかとも思いますがいかがでしょうか。
えええ…?まあそれだとなんもかんも間違ってるんじゃないですかね…?
とりあえず手段をいろいろ提示はしたのであとは実際に手を動かして試してもらうしかないと思います
やってるうちにわかってくることもあるでしょう
正直そちらの目的がわからんので何が正解かはこちらではわかんないですよ…

No.1451 2022/02/16(Wed) 01:14:56

Re: downup / seen
すべてTRUEなら、FALSEになったらということも簡単にできず、ご迷惑をおかけしているようなので諦めます、お付き合いいただきありがとうございました。
No.1452 2022/02/16(Wed) 12:10:21
Edgeで名前をつけて保存ダウンロード / Utopian
お世話になります。
ブラウザ操作をIEからEdgeへの移行の最中なのですが、
名前をつけてダウンロード保存のやり方がわかりません。
以前は公式のQ&Aのスクリプトをそのまま利用していましたが、UWSCWebdriverでEgde操作して名前をつけてダウンロード保存のスクリプトを教えていただけると大変助かります。
ダウンロードしたい場所はボタンになっていて、ファイル名は毎回違います。宜しく願いいたします。

No.1439 2022/01/20(Thu) 16:26:01

Re: Edgeで名前をつけて保存ダウンロード / Utopian
ダウンロードはボタンを押すとすぐに始まります。ファイルは主にtxtかcsvファイルです
Edgeの設定→ダウンロード設定→ダウンロード時の動作を毎回確認する。でダイアログボックスを表示させて操作しようとしてもedgeの名前をつけて保存が操作できませんでした。contextclickが使えれば早いと思ったのですが、UWSCwebdriverには無いようで困っております。

No.1440 2022/01/20(Thu) 17:46:37

Re: Edgeで名前をつけて保存ダウンロード / stuncloud
クレクレはダメだよ


でも一応書いた
ダウンロード先のフォルダ変更なら以下でできます
ファイル名まで変更したい場合はダウンロード後に自分でやる
https://github.com/stuncloud/UwscWebDriver/wiki/%E4%BB%BB%E6%84%8F%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89
こちらに対する質問は受け付けないのでわからないようならわかるようにがんばるか、諦めてください

No.1441 2022/01/20(Thu) 17:51:05

Re: Edgeで名前をつけて保存ダウンロード / stuncloud
今後もUWSCWebDriver関連でのサポートを希望する場合、正式な窓口は以下になります
https://github.com/stuncloud/UwscWebDriver/discussions

No.1442 2022/01/20(Thu) 17:56:21

Re: Edgeで名前をつけて保存ダウンロード / Utopian
返信ありがとうございます。初心者ながら以前作ったuwsファイルをwikiを見ながらedge仕様に改修しているのですが、ダウンロード周りの情報があまり発見できなかったためレベルの低い質問をしてしまい申し訳ありません。

ファイルのダウンロードを一日に何度も実行するため、すべてのファイルに名前を付け管理したいのです。UWSCwebdriverの場合はダウンロード前に名前を変更してからダウンロードすることができないのでしょうか?(名前を付けて保存ダイヤログから保存ができればディレクトリごと指定できるので楽だったのですが)

ファイル名の変更をダウンロード後に実行するやり方は試してなかったのでちょっと試してみます。ありがとうございました。

No.1443 2022/01/20(Thu) 18:36:43

Re: Edgeで名前をつけて保存ダウンロード / stuncloud
> UWSCwebdriverの場合はダウンロード前に名前を変更してからダウンロードすることができないのでしょうか?
できません
そういった操作はUWSCの機能(clkitem等)でやってもらう想定だったからです
でもChromium系はそのへんが思いの外困難なんですね

リンクを右クリックする、がSeleniumだとできるようなので同じような実装ができるかもしれないのですが、今はこちらに注力する余裕がないんですよ
逆に言えば余力があればやれないこともないのでgithubに要望を上げておいてもらうといいかも

右クリックでコンテキストメニューが出せればsckey等でファイル保存ダイアログを表示させるのも可能っぽい気がしますよね

No.1444 2022/01/20(Thu) 21:12:39
XLOPEN について / みつ
お世話になっております。

年明けから XLOPEN を使用しようとすると、「EXCEL cannot be started」 と出て
全ての EXCEL を開けなくなったのですが、microsoft に対策された感じなのでしょうか?
XLOPEN 以外の COM は使えます。

よろしくお願いします。

No.1429 2022/01/07(Fri) 17:23:35

Re: XLOPEN について / stuncloud
createoleobj("Excel.Application")
とした場合はどうでしょうか? (内部的にはこれを叩いてるとおもうので結果は同じ可能性が高いですが)
年明けからとなるとExchangeの日付バグが思い浮かびますが同じ原因だったらいやですね…

No.1430 2022/01/07(Fri) 17:56:08

Re: XLOPEN について / stuncloud
あとは
・スタートメニューなどからExcelは起動するのか?
・UWSC以外からCOMで起動できるのか?
 例:PowerShell
 (New-Object -ComObject Excel.Application).Visible=$true

あたりも確認してみてください

それと気になった点をひとつ
> microsoft に対策された感じ
正式な機能なのでMSが使えなくするならそれは「対策」ではありませんし、機能停止が正式にアナウンスされるはずです

No.1431 2022/01/07(Fri) 18:19:43

Re: XLOPEN について / みつ
>createoleobj("Excel.Application")
>とした場合はどうでしょうか?


以下のエラーが出てしまいます。
COM_Error:クラス文字列が無効です,ProgID:"Excel.Application"
6行目:EXCEL = CREATEOLEOBJ("Excel.Application")


>(New-Object -ComObject Excel.Application).Visible=$true

「80040154 クラスが登録されていません」と出てしまい起動できません。


>・スタートメニューなどからExcelは起動するのか?

手動で起動はできます。


2台 WIN10 の PC があり、その内の一台でのみ現象が発生しています。

また、現象が発生している PC で以下は問題なく動きます。
IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = True

エクセルの設定とかあるのでしょうか?
よろしくお願いします。

No.1432 2022/01/08(Sat) 07:22:12

Re: XLOPEN について / stuncloud
ProgIDが登録されてないのだとすれば以下のような方法で改善するかもしれません

・Excelを修復インストールする (インストーラのメニューからアンインストールではなく修復を選択)
・Excelをアンインストール後再インストールする
・Excelが64ビット版だった場合は32ビット版をインストールする

また、複数のバージョンのExcelがインストールされている場合はProgIDでバージョン指定する必要があるかもしれません
例: Excel.Application.16

No.1433 2022/01/08(Sat) 10:32:13

Re: XLOPEN について / みつ
>・Excelを修復インストールする (インストーラのメニューからアンインストールではなく修復を選択)
>・Excelをアンインストール後再インストールする


週明けに確認してみます。


>・Excelが64ビット版だった場合は32ビット版をインストールする

Excel は32ビットです。


>複数のバージョンのExcelがインストールされている場合はProgIDでバージョン指定する必要があるかもしれません

reg query HKEY_LOCAL_MACHINE\Software\Classes\ | findstr \.Application | more で確認したところ、Excel.Application しか入っていませんでした。

エクセルのバグと考えられ為、修復インストールしてしてみます。

No.1434 2022/01/08(Sat) 14:03:47

Re: XLOPEN について / みつ
stuncloud 様

本日、Excel を修復インストールしたところ無事に直りました。
エクセルが壊れることもあるんですね。
的確なご回答ありがとうございました。
助かりました。

また、よろしくお願いします。

No.1438 2022/01/11(Tue) 19:40:26
OleEvent関数の引数について / John
お世話になっております。

createform関数で作成したフォームが閉じられた際に、プログラム全体を終了するイベント処理をセットしたいのですが、可能でしょうか?
(Threadは使用せず、OleEventによるイベント処理でプログラム終了を実装したい所存です。)

可能でしたら、OleEventに与える引数をご教授願いします。


IEオブジェクト終了時のイベント処理のように、下記記述を試しましたが、うまくいきませんでした。

f=CREATEFORM("about:blank","createform sample",true)
OleEvent(f, "DWebBrowserEvents2", "OnQuit", "Quit" )
--------------------------------------------------------

Procedure Quit()
 exitexit
Fend


宜しくお願いいたします。

No.1435 2022/01/09(Sun) 15:41:26

Re: OleEvent関数の引数について / stuncloud
OnQuitはIE専用?のようでUWSCのフォームでは使えないようです
createformを非同期実行した場合によく使われるのが

while f.visible
 sleep(0.1)
wend

といった待機処理ですが、これはvisibleプロパティがfalseならフォームが閉じられたとみなしているわけです
なのでvisibleが変わったかどうかを検出できるOnVisibleイベントを使います
https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa768294(v=vs.85)

OleEvent(f, "DWebBrowserEvents2", "OnVisible", "Quit" )

Procedure Quit()
 // visibleの値を確認しfalseならフォームが閉じられたとみなして終了
 if EVENT_PRM[0] = false then
  quitquit
 endif
Fend

# 注意点

自分でf.visibleにfalseを代入してもイベントが発火してしまいます
場合によっては実際に閉じられたかどうか?の確認も必要になります

# 蛇足

WindowClosingというイベントもありますがこれはwindow.close()が叩かれたときに発火するイベントのようで
今回のケースでは使えませんでした

No.1436 2022/01/09(Sun) 17:44:35

Re: OleEvent関数の引数について / John
ご回答いただき誠にありがとうございます。

おかげさまで目的の動作を実現することができました。

心から感謝申し上げます。

No.1437 2022/01/09(Sun) 20:08:59
uwscの動くタブレット / sen
いつもお世話になっております。
uwscの動くwindowsタブレットでお薦めはありませんか?
宜しければ、お教え下さい。

No.1426 2021/12/29(Wed) 13:44:04

Re: uwscの動くタブレット / stuncloud
ARM版WindowsでなければUWSCは動くので、あとは好みや予算によるかと思います
好みで言えば僕ならSurfaceですね、一応タブレットの範疇…のはず…

No.1427 2021/12/30(Thu) 15:53:31

Re: uwscの動くタブレット / sen
やっぱりそうですよね。
今日、Surfaceを見てきました。
ご返答、ありがとうございました。

No.1428 2021/12/31(Fri) 00:02:17
当掲示板におけるUwscWebDriver対応終了のお知らせ / stuncloud
以後はdiscordおよびgithubを正式なサポート窓口とします

・discord

UWSCRサーバー内のチャンネルです
リリース告知をしています
質問・要望・バグ報告の受付もします

https://discord.gg/s49BxCx58h

・github

主に掲示板のように使えるDiscussionsを利用します
明らかなバグがあった場合はIssuesからご報告ください
Issuesを作成していいのかわからない場合はまずDiscussionsに書き込んでください

https://github.com/stuncloud/UwscWebDriver/discussions
https://github.com/stuncloud/UwscWebDriver/issues

新規にDiscussionを始める方法

1. https://github.com/stuncloud/UwscWebDriver/discussions を開く
2. [New discussion] ボタンを押し <Start a new discussion> 画面を開く
3. [Select category] ボタンを押し適切なカテゴリを選択する
4. タイトル欄に概要、本文に詳細を記入
5. [Start discussion] ボタンを押す


※ この告知は当掲示板におけるUwscWebDriverの話題を禁止するものではありません
  しかし、こちらへの書き込みを行っても僕(作者)が対応することはなくなります
  (Discussionsへの誘導を行うことはありえます)

No.1425 2021/12/07(Tue) 11:14:33
SetValueメソッドとGetValueメソッドの動作について / ukonniemi
SetValueメソッドでテキストボックスに値を入力する時、例えば既に"foo"と
入力されている状態で、SetValue("bar")を実行すると、入力内容が"foobar"になって
しまいます。

ページ表示後にテキストボックスに入力された内容をGetValueメソッドで取得しよう
としても、空文字列が返されます。UwscWebDriverのソースを見ると、input要素の
value属性の値を返すだけで、初期値しか取得できない仕様になっています。

SetValue("bar")を実行したら、テキストボックスの現在値に関係なく"bar"になり、
GetValue()を実行したら、初期値ではなく現在値を取得できるように出来ないでしょうか。

No.1418 2021/12/05(Sun) 02:13:45

Re: SetValueメソッドとGetValueメソッドの動作について / stuncloud
> SetValueメソッドでテキストボックスに値を入力する時、例えば既に"foo"と
> 入力されている状態で、SetValue("bar")を実行すると、入力内容が"foobar"になって
> しまいます。

SetValue()の前にClear()を呼んでください

> SetValue("bar")を実行したら、テキストボックスの現在値に関係なく"bar"になり、
> GetValue()を実行したら、初期値ではなく現在値を取得できるように出来ないでしょうか。

input要素のvalueと見た目の値が異なるのであればそこに表示されているのはおそらくinputに被せてある別の要素(エレメント)です
開発者ツールで確認してみてください

その手のものはおおよそ
1. 被せてある要素にユーザが入力する
2. 入力された値を本来のinputのvalueに反映する
といったことをやってるはずで、直接inputのvalueが変更されることはほとんどの場合想定されておらず表示との不整合が生じます
とはいえsubmitして送られる値はinputのvalueなので特に問題ないケースが大半だと思われます

No.1419 2021/12/05(Sun) 04:22:32

Re: SetValueメソッドとGetValueメソッドの動作について / ukonniemi
> SetValue()の前にClear()を呼んでください

Clear()の呼び出しで解決しました。GitHubのWikiにはClearメソッドの記載がありません。

> input要素のvalueと見た目の値が異なるのであればそこに表示されているのはおそらくinputに被せてある別の要素(エレメント)です
> 開発者ツールで確認してみてください
>
> その手のものはおおよそ
> 1. 被せてある要素にユーザが入力する
> 2. 入力された値を本来のinputのvalueに反映する
> といったことをやってるはずで、直接inputのvalueが変更されることはほとんどの場合想定されておらず表示との不整合が生じます
> とはいえsubmitして送られる値はinputのvalueなので特に問題ないケースが大半だと思われます


開発者ツールでコードを見ましたが、別の要素を被せるような手法は使われていませんでした。
現状のUwscWebDriverの仕様では、GetValue()ではvalue属性の値しか取得できないので、
以下のような代替手段を試したら、期待通りの動作をしました。このやり方なら、フォームに手入力
された内容も取得できます。

foo = driver.ExecuteScript("return document.getElementById('hoge').value;")

No.1420 2021/12/06(Mon) 03:33:26

Re: SetValueメソッドとGetValueメソッドの動作について / stuncloud
> Clear()の呼び出しで解決しました。GitHubのWikiにはClearメソッドの記載がありません。
確認しました
wikiを更新します

> 現状のUwscWebDriverの仕様では、GetValue()ではvalue属性の値しか取得できないので、
inputに表示されている値とvalue属性値は同じもののはずなのでなぜそのようなことになってるのかは正直わかりません
これはWebDriverがそのように動作しているのが原因なので、UwscWebDriverとしては仕様となります (修正対応は行いません)

No.1421 2021/12/06(Mon) 09:54:37

Re: SetValueメソッドとGetValueメソッドの動作について / ukonniemi
> inputに表示されている値とvalue属性値は同じもののはずなのでなぜそのようなことになってるのかは正直わかりません
> これはWebDriverがそのように動作しているのが原因なので、UwscWebDriverとしては仕様となります (修正対応は行いません)


<input type="text" name="foo" value="bar"> この場合の"bar"は初期値なので、
テキストボックスの入力内容を変更すると、表示上の値とvalue属性の値は一致しなくなります。
例えば、"baz"と入力しても、value="baz"に変化するわけではありません。
GetValue()がvalue属性の値を返している以上、入力値が変更された後の表示上の値と取得した値が
違うのは当然の結果です。

call UwscWebDriver
WebDriver.HideCmd()
opt = WebDriver.Option("edge")
wd = WebDriver.Edge(9515, opt)
ifb wd = NULL then
print "ブラウザを起動できません。"
exitexit
endif
wd.Navigate("https://www.google.co.jp/")
inp = wd.FindElementsByName("q")[0]
inp.SetValue("foo")
print "<#DBL>" + inp.GetValue() + "<#DBL>"
print "<#DBL>" + wd.ExecuteScript("return arguments[0].value", JS.Args(inp.raw())) + "<#DBL>"

上記のサンプルコードの実行結果は以下の通りです。

""
"foo"

SetValue()で入力した値がGetValue()で取得できないのは、set/getがwrite/readの対の関係になって
いない訳で、違和感のある仕様と言わざるを得ません。

No.1422 2021/12/07(Tue) 02:34:05

Re: SetValueメソッドとGetValueメソッドの動作について / stuncloud
状況を把握しました
WebElement.prototype.GetProperty()
を新設します

No.1423 2021/12/07(Tue) 09:49:09

Re: SetValueメソッドとGetValueメソッドの動作について / stuncloud
0.8.1をリリースしました
https://github.com/stuncloud/UwscWebDriver/releases/tag/0.8.1

No.1424 2021/12/07(Tue) 10:00:51
「自動テストソフトウェアによって制御されています」のメッセージ消すことができますか / nyoshikawa
IEベースの自動化をMSEdg版に移行中のところUwscWebDriverで大変お世話になっております。

当初から気になっていたのですが...
UwscWebDriverでMSEdgeを起動すると毎回「自動テストソフトウェアによって制御されています」のメッセージが表示されてます。

表示を閉じようと、右端の「X」閉じるボタンはあるようですが、手動でもクリックが出来ません。

できればUWSCでこの表示を消したいとも思うのですが、抑止方法がわかりません
何か情報、または方法がありましたらご教授下頂けないでしょうか?

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

No.1412 2021/11/22(Mon) 01:50:12

Re: 「自動テストソフトウェアによって制御されています」のメッセージ消すことができますか / stuncloud
以下の方法で消せるようです
https://qiita.com/fugafug92573304/items/6f5b68b4a1a7971a05f8

EdgeCapabilitiesTemplateという雛形があるので、それに上記を加えたtextblockを新たに作りWebDriver.Edge()の第2引数に渡してください

No.1413 2021/11/22(Mon) 05:44:43

Re: 「自動テストソフトウェアによって制御されています」のメッセージ消すことができますか / stuncloud
参考
https://docs.microsoft.com/ja-jp/microsoft-edge/webdriver-chromium/capabilities-edge-options#edgeoptions-object

こちらでも試してみたところ一応「自動テストソフトウェアによって制御されています」のinfobarは消えました
ただ、それを行ったために別の何かが生じるということはあり得ます
ではそれに対してどのような対応が必要なのか?となるとさすがにサポートの範囲外になるのであとは自己責任でお願いします

No.1414 2021/11/22(Mon) 07:21:44

Re: 「自動テストソフトウェアによって制御されています」のメッセージ消すことができますか / nyoshikawa
いろいろ教えていただき、ありがとうございます。

> こちらでも試してみたところ一応「自動テストソフトウェアによって制御されています」のinfobarは消えました

あれから色々試してみましたが...

//以下試したコード ----------------------------------------------
msgbox(WebDriver.Version()) // 0.8.0
WebDriver.HideCmd()
driver = WebDriver.ChromiumEdge(9515, szEdgeCapabilitiesTemplate2)
driver.Navigate("https://www.google.com/")
exit

//"excludeSwitches", ['enable-automation', 'load-extension']
textblock szEdgeCapabilitiesTemplate2
{
"capabilities": {
"alwaysMatch": {
"browserName": "msedge",
"ms:edgeOptions": {
"args": [ ]
"excludeSwitches": ["enable-automation", "load-extension"]
}
}
}
}
}
endtextblock
//以上 試したコード ----------------------------------------------

実行すると
COM_Error:例外が発生しました。
C:\......\WEBDRIVER\UWSCWEBDRIVER.UWS: 141行目: RESULT = CODEOBJECT.WebDriver.Start(URI, CAPABILITIES, DEBUG)
とエラーとなってしまいました。

ms:edgeOptionsの配下の「args」と同レベルの項目と思い、あのようなりました。

「"excludeSwitches": ["enable-automation", "load-extension"]」の行を除外すると
とりあえず動作しますが、実際はどう記述するのが正しいのでしょうか?

(このテキストプロック(szEdgeCapabilitiesTemplate2)の記述方法が良くわかっていません。)


> ただ、それを行ったために別の何かが生じるということはあり得ます
> ではそれに対してどのような対応が必要なのか?となるとさすがにサポートの範囲外になるのであとは自己責任でお願いします


弊害がある場合は、デフォルトに戻したいと思います。

No.1415 2021/11/22(Mon) 22:52:16

Re: 「自動テストソフトウェアによって制御されています」のメッセージ消すことができますか / stuncloud
> ms:edgeOptionsの配下の「args」と同レベルの項目と思い、あのようなりました。
書く場所はそこで良いです
間に , がないのがダメです (jsonが不正)

No.1416 2021/11/23(Tue) 00:33:54

Re: 「自動テストソフトウェアによって制御されています」のメッセージ消すことができますか / nyoshikawa
> > ms:edgeOptionsの配下の「args」と同レベルの項目と思い、あのようなりました。
> 書く場所はそこで良いです
> 間に , がないのがダメです (jsonが不正)


おしえていただいた下記記述で解決しました。
たいへんありがとうございます。<(_ _)>

しばらくこれで様子を見たいと思います。
//--------------------------------------------
textblock szEdgeCapabilitiesTemplate2
{
"capabilities": {
"alwaysMatch": {
"browserName": "msedge",
"ms:edgeOptions": {
"args": [ ] ,
"excludeSwitches": ["enable-automation", "load-extension"]
}
}
}
}
endtextblock
//--------------------------------------------

No.1417 2021/11/23(Tue) 19:08:15
nameにランダム文字列が結合されているdivタグをクリックしたい / yu
以下のdivタグをクリックしたいのですが、nameはランダム文字列が結合されているため
UwscWebDriverのExecuteScriptでjsを実行しようとしたのですが、反応しませんでした。
開発者ツールでスクリプトが正常に実行できることと、ExecuteScriptでjavascriptのalertを実行できることは確認できてます。(UWSCWEBDRIVERが正常に動作することの確認)

やり方が間違っている、または別のアプローチが良いなどご教授いただけないでしょうか。


■環境
Chrome バージョン: 96.0.4664.45
UWSC Free版 Ver5.3.0.2
UWSCWEBDRIVER MODULE_VERSION = "0.8.0"


■クリックしたいdivタグ
<div class="*ランダム文字列* last-name"></div>


■実行したコード

CALL UwscWebDriver.uws
DIM driver = WebDriver.Chrome()

textblock js
document.querySelectorAll(`.last-name`)[0].click()
endtextblock

driver.ExecuteScript(js)

No.1407 2021/11/20(Sat) 14:08:29

Re: nameにランダム文字列が結合されているdivタグをクリックしたい / stuncloud
なんでしょうね
> document.querySelectorAll(`.last-name`)[0].click()
` ではなく ' か " にしたほうが良いのかも?
jscriptを経由するのでそれによる不都合とかあるかもしれないんですが
文字列中の ` なのでjscriptでどうということもないと思うんですけどね

それはそれとしてクリックするだけなら
driver.FindElement("div.last-name").Click()
でできませんか?
.last-name が一意なのであればこれでいいと思います

driver.FindElements("div.last-name")[0].Click()
も同じことです

No.1408 2021/11/20(Sat) 14:38:46

Re: nameにランダム文字列が結合されているdivタグをクリックしたい / yu
stuncloudさん、早急なご返信ありがとうございます

> .last-name が一意なのであればこれでいいと思います
last-nameが一意になります。

` や 'を試してみましたがダメでした。
また。以下を試して見ましたが、elementsの要素が0だったので正常に取れてないようです。FindElementsの書き方を変えてもう少し調べてみます。

DIM elements = driver.FindElements("div.last-name")
PRINT (length(elements))
FOR element IN elements
element.Click()
PRINT ("クリック")
BREAK
NEXT

あと、私もdriver.FindElements("div.last-name")[0].Click() の書き方で合ってると思ったのですが、これは型が合っていないと怒られてしまいました。

No.1409 2021/11/20(Sat) 15:26:19

Re: nameにランダム文字列が結合されているdivタグをクリックしたい / stuncloud
> また。以下を試して見ましたが、elementsの要素が0だったので正常に取れてないようです。FindElementsの書き方を変えてもう少し調べてみます。
開発者ツールで動作しているということはセレクタは合ってるのでしょうが、それでなお見つからないとすると以下が考えられます

・操作時点で該当divが描画されていない
・frame内のページなのでアクセスできない

前者であれば

while true
 div = driver.FindElement("div.last-name")
 if div <> null then
  break
 else
  sleep(1)
 endif
wend
div.click()

のようにすれば描画され次第クリックを行います
後者であるとやや面倒で、以下のような感じになります

1. 対象divがあるページのURLを何かしらの手段で得る
2. そのURLを別ダブで直接開く
3. タブを切り替えて操作
4. 操作後不要であればタブを閉じて元のタブに戻る

暫定的なframe対応(SwitchFrame()メソッド)は一応あるんですが動作があやしいので非推奨です

> あと、私もdriver.FindElements("div.last-name")[0].Click() の書き方で合ってると思ったのですが、これは型が合っていないと怒られてしまいました。
すいません、SAFEARRAYを返すので大丈夫なものだと思いこんでいました
JSメソッドには直接[]が書けないのかもしれません

elems = driver.FindElements(selector)
elems[0].click()

なら大丈夫なはずです

No.1410 2021/11/20(Sat) 17:34:07

Re: nameにランダム文字列が結合されているdivタグをクリックしたい / yu
返信遅れてすみません。
色々とご検討くださりありがとうございます。

> ・操作時点で該当divが描画されていない
> ・frame内のページなのでアクセスできない

クリックしたい画面を開いたままUWSCを起動しており、frameは使用されてないことから
上記でもないんですよね。いろいろと試してみましたが、成功せず原因が謎です。

本来行おうとしていたのは、特定画像(GIF)を探してクリックしたかったのですが、CHKIMG関数だとうまく認識してくれず、
また、CHKIMGX関数でもできませんでした。CHKIMGX関数を使用したときは(各PC環境を考慮するのがめんどくさかったので)
座標指定など引数を細かく指定していなかったせいかもしれません。
そのため、スクリプトを直接実行できないかということで質問の壁に当たってしまいました。

画像認識自体ひとつも成功したことがないので、まず画像認識できるところから見直したいと思います。

No.1411 2021/11/21(Sun) 21:09:14
(No Subject) / sen
お世話になっております。
csvからcsvへの転記したいのですが、もう少し早くなる方法はありませんでしょうか?
以前教えて頂いたfindstrとdoscmdを組み合わせた方法でやっているのですが、4分ぐらい掛かります。

ご教授お願いします。


dim f = "余剰梱包.csv"

GETTIME()
print G_TIME_NN+" "+G_TIME_SS+" スタート"

在庫転記(f)

GETTIME()
print G_TIME_NN+" "+G_TIME_SS+" 終了"

PROCEDURE 在庫転記(f)
  ex = fopen(f,F_READ or F_WRITE)
   For p = fget(ex,-1) TO 3 STEP -1
    抽出 = fopen("temp.csv", f_write)
     fput(抽出, trim(doscmd("findstr <#dbl>" + trim(fget(ex,p,1)) + "<#dbl> 在庫.CSV")))
    fclose(抽出)

    id = fopen("temp.csv")
      For i = 1 to fget(id,F_LINECOUNT)
       ifb trim(fget(ex,p,1)) = trim(fget(id,i,10)) then
        fput(ex,trim(fget(id,i,23)),p,14)
        fput(ex,trim(fget(id,i,25)),p,15)
         break
       endif
      next
    fclose(id)
   next
  fclose(ex)
fend

//余剰梱包.csv //2439行
//梱包,削減,予備,帳簿,21/11/06,機種,追加,引当,在庫2F,種類,状況,待ち,当,フリー,引当,上棚7★,待ち棚7,差棚7,S_,T_
//aaaa,0,0,0,ブラケット,,,,,,,0,0,0,0,0,0,0,,
//bbbb,0,0,2,ブヒンバコ,,,2020/5/11,,,部品箱,1,1,5,0,0,1,0,,

//在庫.CSV //1474行
//一覧表,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
//倉庫,倉庫名称,荷主,荷主名称,1,2,3,4,5,コード,名称,規格1,規格2,規格3,規格4,No,数量1,数量1荷姿名称,数量2,数量2荷姿名称,数量3,数量3荷姿名称,在庫数,移動中数,引当数,出荷止数,重量,容積,基準日,出荷許容日,賞味期限切れ
//110,e,1,t,1,,,,,aaaa,1ダン2ガタ タナイタ1200,,,,,,4,個,0,,0,,4,0,0,0,4,4,,,
//110,e,1,t,1,,,,,bbbb,1ダン2ガタ タナイタ1500,,,,,,1,個,0,,0,,1,0,0,0,1,1,,,
//110,e,1,t,1,,,,,cccc,1ダン2ガタ ワク2ホン,,,,,,4,個,

//結果
//40 12 スタート
//43 55 終了

No.1398 2021/11/07(Sun) 08:54:15

Re: / stuncloud
こちらで作成したサンプルCSVファイルでの結果は以下となりました

dim f = "余剰梱包.csv"
s = GETTIME()
在庫転記(f)
print (GETTIME() - s) + "秒" // 約80秒
s = GETTIME()
在庫転記fixed(f, "在庫.CSV")
print (GETTIME() - s) + "秒" // 約50秒

極力ファイルの読み書きを減らすために配列を使いましたが思ったほど早くならないですね…
splitを使うのでCSV内にダブルクォートや余計なカンマがあると正常動作しなくなるという弱点もあります

例: ほげ,"ふ,が",ぴよ
  csv的には ほげ ふ,が ぴよ になってほしいが ほげ "ふ が" ぴよ の4要素になってしまう

procedure 在庫転記fixed(余剰梱包, 在庫, outfile = EMPTY)
 fid = fopen(余剰梱包, F_READ)
 A余剰梱包 = split(fget(fid, F_ALLTEXT), "<#CR>")
 fclose(fid)
 fid = fopen(在庫, F_READ)
 A在庫 = split(fget(fid, F_ALLTEXT), "<#CR>")
 fclose(fid)

 for i = length(A余剰梱包) - 1 to 2 step -1
  余剰梱包行 = split(A余剰梱包[i], ",", false, false)
  for row in A在庫
   在庫行 = split(row, ",")
   if trim(在庫行[9]) = trim(余剰梱包行[0]) then
    余剰梱包行[13] = trim(在庫行[22])
    余剰梱包行[14] = trim(在庫行[24])
    break
   EndIf
  next
  A余剰梱包[i] = join(余剰梱包行, ",")
 next
 if outfile = EMPTY then
  outfile = 余剰梱包
 endif
 fid = fopen(outfile, F_WRITE)
 fput(fid, join(A余剰梱包, "<#CR>"))
 fclose(fid)
fend

ともあれCSVファイルがそこまで巨大なのであればCSVではなくデータベースを使ったほうが良い気がします
(UWSCからでもデータベースを扱う方法はあります)

あるいはExcelでLOOKUP系の関数などを使えば簡単に望んだ結果が得られそうです
Excel処理の自動化(CSV取り込み、数式埋め込みなど)はVBAでもUWSCでもできますしね

No.1399 2021/11/08(Mon) 12:20:21

Re: / By(バイ)
senさんこんにちは。

 なぜ余剰梱包.csvを逆読みで、しかも3行目までしか読まないのか不思議でしたが、そのままにしてます。

 以下の方法ではどうでしょうか?
 私の環境では秒殺でした。(^_^)V

//----------------------------------------
dim f = "余剰梱包.csv"

GETTIME()
print G_TIME_NN+" "+G_TIME_SS+" スタート"

在庫転記_改(f)

GETTIME()
print G_TIME_NN+" "+G_TIME_SS+" 終了"

Procedure 在庫転記_改(f)
  Hashtbl 在庫数
  fid = Fopen("在庫.CSV", F_READ)
  For i = 2 To Fget(fid, F_LINECOUNT)
   If 在庫数[Fget(fid, i, 10), HASH_EXISTS] Then Continue
   在庫数[Fget(fid, i, 10)] = trim(Fget(fid, i, 23)) + "," + trim(Fget(fid, i, 25))
  Next
  Fclose(fid)
  
  ex = fopen(f,F_READ or F_WRITE)
   For p = fget(ex,-1) TO 3 STEP -1
    If 在庫数[fget(ex, p, 1), HASH_EXISTS] Then
     数 = Split(在庫数[fget(ex, p, 1)], ",")
     fput(ex, 数[0], p, 14)
     fput(ex, 数[1], p, 15)
    Endif
   next
  fclose(ex)
fend

No.1400 2021/11/10(Wed) 19:03:58

Re: / sen
stuncloudさん、Byさん、ありがとうございます。

連想配列の方は、秒殺でした。
以前、Linersさんにも教えて頂いたりしたのを思い出します。
少し変わると、うまく使えなくて恥ずかしい限りです。
でも転記がこんなに早いと、使わないとダメですね。

本当に、ありがとうございました。

No.1406 2021/11/15(Mon) 00:42:39

以下のフォームに記事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