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

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

THREAD同時処理を最大限で利用したい / YMK
お世話になります。
UWSCで早く処理を済ませるため、THREADで同時処理させ、
尚且つ制限である64スレッドを超えないようにするため以下のコードで実行したのですが、
20秒ほどですんなり終わるときもあれば、5分かかっても終わらないときがあります、、、
どこが悪いのでしょうか?
(説明を簡単にするため、コードは簡素にしています)

PUBLIC スレッド数 = 0
for i = 1 to 250
 THREAD 情報取得(i)
 スレッド数 = スレッド数 +1
 while スレッド数 > 60 //スレッド60以下待ち
  sleep(0.02)
 wend
next

while スレッド数 > 0 ; sleep(0.1) ;wend //全てのスレッド終了待ち

msgbox("完了")

PROCEDURE 情報取得(i)
  sleep(1) //処理の代わり
  スレッド数 = スレッド数 -1
fend

No.1461 2022/03/22(Tue) 21:10:01

Re: THREAD同時処理を最大限で利用したい / stuncloud
問題があるとすればスレッド数が60以下になるまで待つ処理ですかねえ
開始されない処理がそれなりに溜まっているわけで、うっかりスレッド数が60→59→60→59→…なんて遷移してると遅くなるということがある…のかな…?

いっそのこと64スレッドずつプロセスを分けてしまう方がいいかもですね
プロセス1でスレッド1〜64
プロセス2でスレッド65〜128
プロセス3でスレッド129〜192
プロセス4でスレッド193〜250
みたいな感じで
PARAM_STR[]でどこからどこまでやるかを伝えていけば良さそうです

別プロセスの立ち上げは終了を待たない方法ならなんでもいいのでdoscmdでおそらくOK
でもプロセス終了判定が面倒かな…?
用途次第ですがやりっぱなしでいいなら終了判定もいらないですね

No.1462 2022/03/22(Tue) 23:35:42
UwscWebDriver ファイルの選択ボタンと閉じるボタンのクリックの処理がされない / sakamoto
UwscWebDriverを使ったUWSCの記述の仕方を学習していますが、
ボタンをクリックして表示されるウインドウでファイルを選択する
という基本的な操作の記述の仕方がよく分からないので教えてください。

具体的には、

C:\uwsc_testというフォルダに以下の5つのファイルがあります。
・UwscWebDriver.uws
・msedgedriver.exe
・test.html      (リスト1参照)
・test.uws      (リスト2参照)
・test.txt      (とりあえず中身は何でもよい)

test.htmlをMicrosoft Edgeで開くと、
「ファイル選択」というタイトルのページが表示されます。
「ファイルの選択」ボタンをクリックします。
「開く」というタイトルのウインドウが表示されます。
「ファイル名(N):」のボックスに「C:\uwsc_test\test.txt」を入力して、
「開く」ボタンをクリックします。
「開く」のウインドウが閉じて、元の「ファイル選択」のページに戻ります。
「ファイルの選択」の右側に「test.txt」と表示されていることを確認して、
「閉じる」ボタンをクリックして、「ファイル選択」のページを閉じます。

以上の操作をUwscWebDriverを使ってUWSCで操作させたいのですが、

下記のリスト2(test.uws)のようなコードを記述しましたが、
(3)と(5)の部分で「ファイルの選択」ボタンと「閉じる」ボタンの
クリックの処理がうまくいきません。
(3)で「開く」ウインドウが開いて、
(5)で「ファイル選択」ページが閉じるようにするには、
どのように記述すればよいのでしょうか。

---リスト1(test.html)--------------------------------------------------
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<TITLE>ファイル選択</TITLE>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
</HEAD>
<BODY>
<FORM>
<DIV>
</DIV>
<TABLE cellSpacing=0 cellPadding=2 width=730 align=center border=1>
<TBODY>
<TR>
<TH class=size14 style="WIDTH: 163px" bgColor=#ffffcc height=20 vAlign=middle noWrap align=center>ファイル</TH>
<TD bgColor=#dddddd height=20 vAlign=middle colSpan=2 align=left>
<INPUT style="HEIGHT: 27px; WIDTH: 100%" type=file id="filepath">
</TD>
</TR>
</TBODY>
</TABLE>
<TABLE cellSpacing=0 cellPadding=2 width=730 align=center border=0>
<TBODY>
<TR>
<TD align=right>
<INPUT onclick=window.close(); type=button value=閉じる id="closebtn">
</TD>
</TR>
</TBODY>
</TABLE>
</FORM>
</BODY>
</HTML>
-----------------------------------------------------------------------

---リスト2(test.uws)---------------------------------------------------
CALL UwscWebDriver.uws

//(1)Edgeの起動
driver = WebDriver.ChromiumEdge()

//(2)test.htmlの表示
driver.Navigate("C:\uwsc_test\test.html")
driver.SetRect(835, 270, 10, 10)

sleep(1)

//(3)ファイルの選択ボタンをクリックして開くウインドウを開く
element = driver.FindElement(By.Tag("input") + By.Id("filepath"))
element.Click()

sleep(1)

//(4)開くダイアログでファイルを指定して開くボタンをクリック
id=GETID("開く")
SENDSTR(id, "C:\uwsc_test\test.txt", 1, True)
sleep(2)
CLKITEM(id, "開く", CLK_BTN, True, 1 ) 

sleep(1)

//(5)閉じるボタンをクリックしてファイル選択のページを閉じる
element = driver.FindElement(By.Tag("input") + By.Id("closebtn"))
element.Click()
-----------------------------------------------------------------------

【実行環境】
・OS (Windows10)
・Microsoft Edge   (98.0.1108.56)
・UwscWebDriver.uws  (0.8.2)
・msedgedriver.exe  (ChromiumEdge 98.0.1108.56)

よろしくお願いします。

No.1455 2022/02/26(Sat) 15:50:27

Re: UwscWebDriver ファイルの選択ボタンと閉じるボタンのクリックの処理がされない / stuncloud
UWSCWebDriverの質問に関しては以下をご確認ください
https://www3.rocketbbs.com/601/bbs.cgi?id=siromasa&mode=pickup&no=1425

discordでも同様の質問を受けていたので後でwikiに書きます

追記: 書きました
https://github.com/stuncloud/UwscWebDriver/wiki/%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%8C%87%E5%AE%9A%E6%96%B9%E6%B3%95

No.1456 2022/02/26(Sat) 16:46:38

Re: UwscWebDriver ファイルの選択ボタンと閉じるボタンのクリックの処理がされない / しろまさ
// 使ってる奴。説明無し。使いこなせるならどうぞ。EdgeとChromeの違いは要修正。
// 全角空白2個を水平タブに置換してください 

  Public  fEndDlg = FALSE  //  入力完了フラグ

  WD.FindElement("#updateImportType").Click()
  FileOpenDlgWD(fpXL, "現場 一括取込・更新")

  Procedure  FileOpenDlgWD(_fpXL, _ttlWD)
    Dim #idW, #idD, #Ttl = Ttl(2)
    
    Repeat  //  Chrome idWin取得
      #idW = GetID(_ttlWD , "Chrome_WidgetWin_1", 0.5)
    Until  #idW > 0  //  取得出来たら抜ける
    
    Repeat  //  クリック〜FileOpenDLG待機
      Sleep(0.2)
      ClkItem(#idW, "ファイルを選択")    //  win7?でクリック出来ない
      #idD = GetID(#Ttl, "#32770", 1)    //  2:開く
      Ifb #idD < 1 AND KindOfOS() < 30  //  win7 はメッセージ
        MsgBox("ブラウザの 【 ファイルを選択 】 ボタンをクリック後、OKを押してください。")
        #idD = GetID(#Ttl, "#32770", 1)  //  2:開く
      EndIf
    Until  #idD > 0
    
    Thread  th_InputXLfp(_fpXL, 2)  //  FileOpenDLGの入力・確認(スレッド処理)
    Repeat
      Sleep(0.2)  ;
    Until  fEndDlg  //  ダイアログの終了を待機
    Sleep(2)
  FEnd

  //  ファイルオープンダイアログでXLパスを入力し決定する
  Procedure  th_InputXLfp(_fp, _n = 1)
    fEndDlg = FALSE
    Dim #id, #gtE = gtE_Get(15)
    Repeat
      Repeat
        gtE_Chk(#gtE, TRUE)
        #id = GetID(Ttl(_n), "#32770", 0.5)
      Until  #id > 0
      Sleep(1)
      
      Ifb KindOfOS() >= 30  //  win10以降
        Repeat
          SendStr(#id, "", 1, TRUE)  ; Sleep(0.2)
          SendStr(#id, _fp, 1, TRUE)  ; Sleep(0.2)
        Until  GetStr(#id, 1, STR_EDIT) = _fp
      Else          //  win7
        Repeat
          SendStr(#id, "", 0, TRUE)  ; Sleep(0.3)
          SendStr(#id, _fp, 0, TRUE)  ; Sleep(0.3)
        Until  GetStr(#id) = _fp
      EndIf
      
      ClkItem(#id, "開く(O)", CLK_BTN)
      
      Repeat
        If gtE_Chk(#gtE)  Then Continue 2
        #id = GetID(Ttl(_n), "#32770", 0.2)
      Until  #id < 1
      Sleep(1)
    Until  TRUE
    fEndDlg = TRUE
  FEnd

  Function  Ttl(_n)
    Dim #s
    Select  _n
      Case 1  ; #s = "アップロードするファイルの選択"  //  IE
      Case 2  ; #s = "開く"              //  Chrome
      Default    ; MsgBox(_n +" 未定義の番号です。")  ; ExitExit
    SelEnd
    Result = #s
  FEnd

  //  待機終了管理
  Function  gtE_Get(_secWait = 15)
    Result = GetTime() + _secWait
  FEnd
  Function  gtE_Chk(_gtE, _EndM = FALSE)
    Result = GetTime() > _gtE
    Ifb Result
      MsgBox("待機時間を超過したため終了します。")
      ExitExit
    EndIf
  FEnd

No.1457 2022/02/28(Mon) 11:38:47
clkitem関数に再試行処理追加する方法について考えた時の自分用のメモ書き / 名無し
// with fukidasi
// .testfukidasi = true
// .clearClkfukidasi = false
// .error_stop = false
// .screen_shot = true
// .trytimeout = 30
// .initialwait = true

Class fukidasi
public testfukidasi = false
public clearClkfukidasi = false
public error_stop = false
public screen_shot = false
public trytimeout = 3
public initialwait = 0
Public msg = "", wait = 3//メッセージ消去時間

dim _w,_x,_y,_fuid1,_fuid2

Procedure fukidasi
Thread This._1()
global.fukidasi("a")
_fuid1=getid(get_fukidasi_win)//本家スレッドの吹き出しid
global.fukidasi()
Fend

function clkitem(var id,name,opt=0,on_off=true,no=1)
dim opttxt =""
decodeClkopt(opt,opttxt)

c=0
s="<#dbl>"+name+"<#dbl>の操作"
s0(s)
isid=status(id,ST_isid)
if !(isid) then s=s+"はidが無効"
sleep(initialwait)
while isid
if pos(" CLK_LEFTCLK ",opttxt) then mouser(false)
result=global.clkitem(id,name,opt,on_off,no)
if pos(" CLK_LEFTCLK ",opttxt) then mouser(true)
if result then
if clearClkfukidasi then s() else s0(s+"成功")
exit
endif
c=c+1;
s0(s+c)
if c >= trytimeout then break
sleep(1)
wend
if screen_shot then
doscmd("mkdir 画面ショット")
saveimg(uniqueFilename("画面ショット\処理不能.jpg"),,,,,,,25)
fileid=FOPEN(uniqueFilename("画面ショット\処理不能.txt"), F_WRITE)
FPUT(fileID, s+"で処理不能")
FPUT(fileID, "種別・追加指定 " + opttxt)
fput(fileID,"タイトル " +status(id,ST_title))
fput(fileID,"クラス名 " +status(id,ST_CLASS))
fput(fileID,"X座標 " +status(id,ST_X))
fput(fileID,"Y座標 " +status(id,ST_Y))
fput(fileID,"幅 " +status(id,ST_WIDTH))
fput(fileID,"高さ " +status(id,ST_HEIGHT))
// fput(fileID,"クライアント領域のX座標 " +status(id,ST_CLX))
// fput(fileID,"クライアント領域のY座標 " +status(id,ST_CLY))
// fput(fileID,"クライアント領域の幅 " +status(id,ST_CLWIDTH))
// fput(fileID,"クライアント領域の高さ " +status(id,ST_CLHEIGHT))
fput(fileID,"アイコン状態である " +status(id,ST_ICON))
fput(fileID,"最大化状態である " +status(id,ST_MAXIMIZED))
fput(fileID,"通常の表示状態である " +status(id,ST_VISIBLE))
// fput(fileID,"アクティブ状態である " +status(id,ST_ACTIVE))
// fput(fileID,"ビジー状態である " +status(id,ST_BUSY))
fput(fileID,"EXEのパス " +status(id,ST_PATH))
// fput(fileID,"プロセスID " +status(id,ST_PROCESS))
// fput(fileID,"64bitアプリである " +status(id,ST_WIN64))
fput(fileID,"表示されているモニタ番号 " +status(id,ST_MONITOR))

FCLOSE(fileID)
endif
if error_stop then
if MSGBOX(s+"で処理不能",BTN_IGNORE or BTN_ABORT) = BTN_IGNORE then
else
exitexit
endif
endif
if clearClkfukidasi then s() else s0(s+"で処理不能")
fend

procedure s(msg="",x=-999,y=-999)
if msg="" then
ctrlwin(_fuid2,hide)
exit
endif
if x = -999 and y=-999 Then
if status(_fuid1,st_visible) then
_x= Status(_fuid1,ST_x)
_y= Status(_fuid1,ST_HEIGHT)
else
_x=0;_y=0
endif
else
This._x = zcut(x)
This._y = zcut(y)
endif
This.msg=msg
fend
procedure s0(msg)
if testfukidasi then s(msg)
fend

Procedure _1()
While TRUE
r= This._2()
If r<>"" Then
GLOBAL.Fukidasi(r,_x,_y) // 吹き出し
this._fuid2 = getid(GET_FUKIDASI_WIN)
endif
If This._3() Then GLOBAL.Fukidasi() // 吹き消し
Wend
Fend

Function _2() // メッセージチェックと表示 msg,wait,_w
Result= msg
If msg="" Then Exit
_w= wait
msg= ""
Fend

Function _3() // タイマカウント _w
Result= FALSE
If _w<=0 Then Exit
_w= _w-0.1
Result= _w<=0
Sleep(0.1)
Fend
FUNCTION uniqueFilename(path)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
IFB FSO.FileExists(path) THEN
DIM fol = FSO.GetParentFolderName(path)
DIM filename = FSO.GetBaseName(path)
DIM extension = FSO.GetExtensionName(path)
DIM i = 2
WHILE FSO.FileExists(FSO.BuildPath(fol, filename + i + "." + extension))
i = i + 1
WEND
RESULT = FSO.BuildPath(fol, filename + i + "." + extension)
ELSE
RESULT = path
ENDIF
FEND

dim old_gmouse_X,old_gmouse_Y
procedure mouser(flg)
if flg then
lockhardex()
mmv(old_gmouse_X,old_gmouse_Y)
else
old_gmouse_X= G_mouse_X; old_gmouse_Y=G_mouse_Y
lockhardex(0)
endif
fend
procedure btn(p1,p2=click,x=G_mouse_X,y=G_mouse_y,ms=0)
mouser(false)
global.btn(p1,p2,x,y,ms)
mouser(true)
fend
procedure decodeClkopt(opt,var opttxt)
if (opt and CLK_BTN) <> 0 then opttxt=opttxt+"CLK_BTN + "
if (opt and CLK_LIST) <> 0 then opttxt=opttxt+"CLK_LIST + "
if (opt and CLK_TAB) <> 0 then opttxt=opttxt+"CLK_TAB + "
if (opt and CLK_MENU) <> 0 then opttxt=opttxt+"CLK_MENU + "
if (opt and CLK_TREEVIEW) <> 0 then opttxt=opttxt+"CLK_TREEVIEW + "
if (opt and CLK_LISTVIEW) <> 0 then opttxt=opttxt+"CLK_LISTVIEW + "
if (opt and CLK_TOOLBAR) <> 0 then opttxt=opttxt+"CLK_TOOLBAR + "
if (opt and CLK_LINK) <> 0 then opttxt=opttxt+"CLK_LINK + "
if (opt and CLK_ACC) <> 0 then opttxt=opttxt+"CLK_ACC + "
if (opt and CLK_SHORT) <> 0 then opttxt=opttxt+"CLK_SHORT + "
if (opt and CLK_BACK) <> 0 then opttxt=opttxt+"CLK_BACK + "
if (opt and CLK_MUSMOVE) <> 0 then opttxt=opttxt+"CLK_MUSMOVE + "
if (opt and CLK_RIGHTCLK) <> 0 then opttxt=opttxt+"CLK_RIGHTCLK + "
if (opt and CLK_LEFTCLK) <> 0 then opttxt=opttxt+"CLK_LEFTCLK + "
if (opt and CLK_DBLCLK) <> 0 then opttxt=opttxt+"CLK_DBLCLK + "
if (opt and CLK_FROMLAST) <> 0 then opttxt=opttxt+"CLK_FROMLAST + "
if (opt and CLK_API) <> 0 then opttxt=opttxt+"CLK_API + "
if (opt and CLK_UIA) <> 0 then opttxt=opttxt+"CLK_UIA + "
opttxt = copy(opttxt,1,LENGTH(opttxt)-2)

fend
EndClass

No.1453 2022/02/23(Wed) 20:20:50

Re: clkitem関数に再試行処理追加する方法について考えた時の自分用のメモ書き / stuncloud
https://gist.github.com/
No.1454 2022/02/23(Wed) 20:48:58
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

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

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

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

Rocket Board Type-X (Free) Rocket BBS