2021年12月28日火曜日

TSUTATA宅配レンタルの登録情報の確認の画面が開けない

 年末に帰省するので、TSUTAYA DISCASの配送先の住所を変更しようかなと。

まずMACのSafariで宅配レンタルのマイメニューから登録情報の確認を選択すると、tsiteのログインの画面?に飛ばされて何もできず。

それならとWindowsのEdgeから試しても同じ症状。ただしpop up blockのalart表示あり。
しかし、block解除しても同じ症状でダメでした。

macもsafariのpop up blockを解除設定をしても変わらず。

やむを得ずスマホから試したところ難なくメニューが表示されて配送先を変更できました。

う~ん。ではwindowsで一度宅配レンタルをログアウトして、再度yahoo IDで再ログインしたところ、無事に登録上の確認画面が開けました。MACのsafariも同様でした。

またもや、くだらないところで時間を取られました。


2021年8月21日土曜日

VBSでのclipbord内容の取得がうまくいかない

先日、以下の方法で取得可能と書きました。

    ’clipboard操作用objectを作成
    Set objHTML = CreateObject("htmlfile")
    'clipboardの内容を取得する
    strTEXT = objHTML.ParentWindow.clipboardData.GetData("text")

が、作成したtoolを他の人に使ってもらったところうまくいかず。
原因を調査したところclipboardの内容を取得できていませんでした。
(errorにもならないのが厄介)

netで調べていくとセキュリティ設定について言及されているものを発見。

IEのインターネットオプションでセキュリティのインターネットのレベルのカスタマイズで、スクリプトのスクリプトによる貼り付け処理の許可を有効にする。

しかしながら会社のセキュリティ設定で、この項目を有効にすることができません。

ではなぜ自分のPCではclipbord内容を取得できているのか?

以前に何かのtoolを作成したときに以下の設定をしていたのを思い出しました。

IEのインターネットオプションでセキュリティの信頼済みサイトのサイトに、about:blankを加える。(下の「このゾーンのサイトには~」のcheckを一度外して追加)

この設定を他の人にも行ってもらったところtoolが動くようになりました。

about:blankは中身の何もないpageを示しており、setしたobjHTMLが空っぽなので、この設定で信頼済みサイトとして認識されるようです。

2021年8月7日土曜日

VBSでIEを最前面に出す

 VBAだと

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

で最前面に表示されるのですけど、VBSだとなぜか背面に表示されます。

APIの「SetForegroundWindow」が使えそうなのですが、VBSで使える?

trickyではありますが、Excel4.0からcallすると使えるようです。

    'windowactiveにする(APIを使う)
    With CreateObject("Excel.Application")
        Call .ExecuteExcel4Macro("CALL(""user32"", ""SetForegroundWindow"", ""JJ"", " & objIE.hWnd & ")")
    End With

    戻り値はtrue/falseのようですけど、”JJ”を”LJ”にするとerrorになります。

    変数=戻り値、にしてもerrorになる?

ですが、windowが前面に出てきません。

調べていくと「SetForegroundWindowWindows95、およびWindows98では正常に機能しますが、Windows2000WindowsXPにおいてはタスクバーで点滅し、ウィンドウが隠れてしまいます。」とな。orz

では、「SetWindowPos」ではどうでしょう。

    'windowactiveにする(APIを使う)
    With CreateObject("Excel.Application")
        Call .ExecuteExcel4Macro("
CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & objIE.hWnd & ",0,0,0,0,0,3)")
    End With

hWndの直後の0は「Zオーダーのトップに置く」らしいのですが、うまくいきません。
-1が「ウィンドウ表示リストのトップに置く(非アクティブになっても常にトップ位置を保持する)」であり、これはうまくいきました。しかし常にtopに居座られるのは邪魔。
-2は「トップ指定されたウィンドウの直後に置く」となってますが「解除」となっているものもあり、これを噛ませるたら所望の動作にできました。

よって、最終的なcodeは以下になります。

    'windowactiveにする(APIを使う)
    With CreateObject("Excel.Application")
        Call .ExecuteExcel4Macro("
CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & objIE.hWnd & ",-1,0,0,0,0,3)")
        Call .ExecuteExcel4Macro("CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & objIE.hWnd & ",-2,0,0,0,0,3)")
    End With

Excel.Application objectの生成に時間が掛かるのが玉に瑕ではありますが。
あ~、ExcelがinstallされていないPCではダメだという問題もありますね。

VBSでのclipboadの操作

editorの関係で、VBAで作ってVBSに移植を行っています。

clipbosrd操作もVBAとVBSで違いがあるようです。

HTMLfile objectを使用します。

    'clipboard操作
    Set objHTML = CreateObject("htmlfile")

clipbordのtext取得はVBAとVBSで同じ方法で行けそう。

    'clipboardの内容を取得する
    strTEXT = objHTML.ParentWindow.clipboardData.GetData("text")

clipboardへの書き込みが問題です。

    'Clip BoardSetする VBAはこちら
    objHTML.ParentWindow.clipboardData.setData "Text", strTEXT

    'Clip BoardSetする VBSはこちら
    cmd = "cmd /c ""echo " & strTEXT & "| clip""" 
    CreateObject("WScript.Shell").Run cmd, 0

VBA用はVBSではうまく動かず、VBS用はVBAではうまく動かず、良く分かりません。

VBS用は注意点がいくつかあります。

    最後に改行codeが入る
    |の前にspaceを入れるとspaceが入ってしまう
    strTEXTが空白だとechoの結果がclipboardに入ってしまう
    strTEXTに"が含まれているとうまく動作しない

改行codeをなくすには無理やりですが以下のようにしました。

    'Clip BoardSetする VBSはこちら
    cmd = "cmd /c ""set /p a=""" & strURL & """ < nul | clip"""
    CreateObject("WScript.Shell").Run cmd, 0

いずれにせよ制約が多そうなので、careしながら使うことにします。


このtopicsと全然関係ないですが、今回VBAで他に嵌ったのは、

    val関数が使えない。

        これは\と,を””に置換したらstringのまま計算できた。

 err objectがglobal変数だと思っていたらlocal変数だった

        private subに入ったら別の中身になっていました.

        VBAでも同じかな。documentを読むとglobalみたいなのですけど。


少なくともclipbord操作くらいはVBSの標準機能にしてほしいですね。

AOL mailが突然IMAP or POPで取得できなくなった

 2021年8月6日の未明から、突然、@aol.jpのmailが取得できなくなりました。

androidからIMAPで取得していたもの、POPで取得していたもの、windowsからPOPで取得していたもの、すべてダメです。

mail serverの不調なのかと思い1日待っても、ずっとerrorのまま。

netで調べてみるとOUTLOOKで2月に同じ症状が発生しているようです。

 これとか:突然outlookでaolが使用できない - Microsoft コミュニティ

AOLにloginするpasswordではダメで、IMAP/POP用のpasswordを取得してそれを用いるようになったのですね。

以下が対応方法です。

まず、次のURLにaccessします。https://login.aol.com/account/security

で以て、一番下の「アプリパスワードの管理」をクリックします。

ここで、アプリの選択の目的がよく分からないのですが、私は、「androidのメール」と「その他のアプリ」で「Windows Mail」としての2つのpasswordを生成しました。

(accessしているdevice or softwareを認識して、個別にpasswordが必要なのか?)

それらをcopyして、使っていたmail softwareの受信や送信のpasswordとして再入力したらmailが取得できるようになりました。

 参考はこれとか:AOLメールをアプリで送受信するためのパスワード設定

ホッとましたが、上のURLの情報で「2021年6月には新しく設定することはできなくなる予定とのこと」とあり(今回過ぎているのに大丈夫でしたけど)、いつまで使えるのか心配です。

2021年6月8日火曜日

qiskit install

1) commandから、pip install qiskitとしてみた。
    ERROR: Could not install packages due to an OSError:~というErrorが発生

2) デフォルトのパス長制限に引っかかってインストールに失敗するという問題とのこと。
    
“regedit”で
    \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem"
    
LongPathsEnabled”の値を1に変更したあと、再度1)を実行してinstall成功。

3) PythonのIDELでoutput.drawを行うと表示が崩れる。
    Option->Configure IDLEでfontをCourierに変更できちんと見えるようになった。

Pythonのintallで大ハマり

1) Pythonの公式にaccesssして最新版をdownload
        Welcome to Python.org
        3.9.5

2) downloadしたexe fileをdouble clickで実行
        Install Nowをclick
        普通に終了

3) commandでpipを実行したところ動作せず
        netで調べるとpathが通っていないとのこと
        where Pythonでdirを調べて確認するとScript dirがない...。
        この時のdirは、
C:\Users\XXX\AppData\Local\Microsoft\WindowsApps
        dirには、Python.exeとPython3.exeがある。

4) downloadしたexe fileを再度double clickで実行
        modifyで確認するとpipにcheckが入っている。

5) 上記で一旦uninstallを選択
        成功したが、設定のアプリと機能にlauncherが残っている。
        Start menuからは消えている。
        commandで3)のdirectoryを確認すると
Python.exeとPython3.exeが残っている。
        where Pythonでも表示される。
        前にもinstallしたことがあったのだったか?uninstall方法がわからない。

6) downloadしたexe fileをdouble clickで実行
        Customize installationをclick
        nextを押すとinstall場所は
        C:\Users\tXXX\AppData\Local\Programs\Python\Python39
        3)と場所が違いますね。ここにはScripts dirがある。
        where Pythonは3)と変わらない。

7) 環境変数を確認
        3)のdirはuser環境変数のpathに含まれている
        6)のScripts dirをsystem環境変数のpathに追加
        commandからpipが使用できるようになった。

8) 3)のWindowsAppsにあるPython fileが気持ち悪いが、
        IDLEで実行している限りは問題なさそうなので一旦放置。

 また今日も無意味な時間を費やしてしまいました。

2021年5月30日日曜日

tinySeleniumBasicによるEdgeのscraping

 今までVBAで、IEのscrapingを行っていたのですが、IEのsupport期限も迫ってきているのでedgeによるscrapingを検討しました。

参考にしたのは以下です。
 Excel VBAでSeleniumBasicを使わずにスクレイピングする - Qiita

一般的にはseleniumBasicを使用するようですが、他の人に渡すときに色々installしてもらう必要があると厄介なので、MedgeDriver以外はVBAで対応できるこの手法を選択しました。

やることはざっと以下のような内容です。

1) 指定のURLが開いていたらそのwindowを取得、開いていなければ開く。
2) buttonをいくつか押して所望のpageに遷移して情報を読み出す。
3) buttonを押して開いたwindowの情報を読み出す。
4) download buttonを押して、csv fileを開く。

これが全てできればよいのですが、1)の"開いていたらwindowを取得"がまだできません。
その他については何とかなったので、方法などについて簡単にまとめてみます。

a) tinySeleniumBasicのimport
 単純にimportするだけだと思っていたのですがうまくいかず。
 tinySeleniumBasicは拡張子が.clsなのですけどimportするとなぜか標準moduleになってしまいます。
 class moduleを作成して内容をコピペして最初の4行を削除し、object名も変更する必要があります。JsonConverterは拡張子.basで問題なし。

b) 開いているwindowの取得
 tinySeleniumBasicのWebDriverに、COM_GET_ALL_SESSIONSという記述があり、これを使えば何とかなるかと思ったのですが、W3Cの仕様規定には見つからず、実装されていないようです。いろいろ調べてみたところ、自動起動した以外のsession IDはsecurityの観点で取得できなようになっているようです。なのでやむを得ず諦めです。

c) clickで開いたwindowの取得
 これもダメなのかと思いましたが、自動clickで開いたwindowはsession IDが変わらず、window handleを取得して切り替えることが可能でした。

    Dim parameters As Dictionary    '定義せずにsetだけだと型違いになりNG
    Set parameters = New Dictionary
    parameters.Add "handle", ""     'dictionary変数のkeyを確保
    oldWindowHandle =                  Driver.Execute(Driver.CMD_W3C_GET_CURRENT_WINDOW_HANDLE) '親のwindow handleを取得
    For Each objEL In Driver.FindElements(By.Tagname, "BUTTON")
        If objEL.GetText = "ボタンに表示されているテキスト" Then
            objEL.Click '開く
            Application.Wait Now() + TimeValue("00:00:01")  '少し待つ(無くてよさそう)
            NewWindowHandle = Driver.Execute(Driver.CMD_W3C_GET_WINDOW_HANDLES)(2)  'windowhandleを取得、1が親で2が子
    parameters("handle") = NewWindowHandle    'windowhandleset
    Driver.Execute Driver.CMD_SWITCH_TO_WINDOW, parameters    'windowswitch
    Application.Wait Now() + TimeValue("00:00:02")  '少し待つ(無いと止まる)
    'ここで子windowの必要な内容を抽出
    '抽出が終了
    Driver.FindElements(By.Tagname, "BUTTON")(0).Click    'windowを閉じる
    parameters("handle") = oldWindowHandle    'windowhandleset
    Driver.Execute Driver.CMD_SWITCH_TO_WINDOW, parameters    'windowswitch

といった感じです。

d) fileをdownloadして開く

 IE+VBAでは、Automationを使って開くbuttonを押してfileが開くのを待っていましたが、Edgeではbuttonを押すとそのままdownload folderに落ちるので、download folderにfileができるまで待って開けばOK。IEより簡単でした。

おかげさまで必要なことは一通りできるようになりました。
@uezoさんとTim Hallさんに感謝します。

あと、こうだったら良いな、というのを書いておきます。

i) FindElementsで取得したitem数が知りたい

 item数のpropertyが欲しいです。
 for eachで回せばよいのですが、item数0だった場合errorになるし。

ii) FindElementsのby.にallが欲しい。

 ClassName、CssSector、ID、Name、TagNameが使えるのですが、 scrapingしているpageが右click禁止設定になっており、開発者toolでの調査ができません。
 IEではdocument.allで調べており、今回はIE版の焼き直しなので情報は揃っていましたが、最初からEdgeで分析しようとするとallがないと厳しいです。

iii) 検索ボタンが操作可能でないときの回避方法

 @uezoさんの記事の”これは検索ボタンが操作可能でないときにクリック指示を出してしまっていることが原因で、この回避方法についてはまた別途記事にしたいと思います。”を期待しています。waitをかますだけだといまいち心配なので。

以上です。

2021年4月11日日曜日

Switch Bot Curtain

 スイッチボット カーテンをリビングに導入してみました。

植物をリビングに置いていて、昨年はかなり気を付けていたのですが、今年は夜明け前に家を出るときにカーテンを開け忘れてしまったり、リモートワーク中に暗くなってカーテンを閉めるが面倒だったり、で、Amazonのセールで少し安かったので、思い切って購入しました。

購入前の調査では、音が大きくてその音で目覚めてしまう、途中で止まってしまう。というレビューが多かったです。リビングなので音はまあいいか、カーテンレールは留め具で段差が生じていてちょと危険な感じでしたが何とかなるかな、という見切り判断です。

レールの寸法を確認するのに、3Dプリンタで厚さ1㎜程度の治具を印刷して確認したところ、問題なし。

納品後の取り付けは非常に簡単、アプリの導入と連携も特にトラブルなし。

で、起動すると、う~ん、やはり、途中で止まってしまいました。
確認すると、レースのカーテンの襞に動かすカーテンの襞が干渉するのと、レールの取り付け金具の外側1mm、内側2mmの段差が乗り越えられない、というのが原因のようでした。
カーテンを連結して1台で2枚分を開閉するので、その分のパワーも足りていないのかもしれません。
レースのカーテンは裏表を入れ替えて干渉を緩和、内側2mmの段差部はスロープ治具を3Dプリンタで印刷してローラーが乗り越えやすくしました。最初、カーテンレールの開口部とスロープ治具の距離がちょっと近くてスライダと治具が干渉したのでスロープ治具を改善し、なんとか止まらずに開閉できるようになりました。まだ一部スムーズに動かないところがありますが(内側の1㎜の段差かな)。また、静音モードでは、やはり止まってしまうので、残念ながら高性能モード一択です。

タイマー設定での開閉は問題ないです。
購入前は、照度センサで開閉設定しようと思っていたのですけど、無理そうです。センサーが、晴天時の日中でもレベル1~3、夜中でもレベル0~2程度です。照度設定は、開閉それぞれのレベルを設定するのですが、どちらも2~10の選択になっていて(0,1が選択できない)、うまい設定になりません。レベル0が選択できても、閉じる側はダメそう。
カーテン上部に取り付けるので、庇や窓枠で陽が遮られるのと、レースのカーテンを通しているので照度が落ちているのだと思います。10段階のレベルではなくて%で設定できるようにしてほしいところです。(照度での開閉設定はβ版と表記されています)
レベル4以上に上がらないとなると、ソーラパネルの導入も無理ではないかと思います。

ちょっとお高いですが(他の製品より安いか)、コンセプトはよいかな。装置が大きめなのでカーテンを閉じたときに装置部のカーテンが畳めず、気にはなります(実用上の支障はないですが)。装置はもっと長くて良いので幅をずっと細くしてほしいところ。そのほうが照度も稼ぎやすいでしょう。
とりあえず目的は果たせているので満足です。

HUBを導入するとアレクサから音声コントロールできるようですけど、とりあえず保留。
HUBからのコントロールは多分BTかな? eRemoteはIRだけなので無理でしょう。レビューを書いたら1980円相当の製品をプレゼントするというメールが来たので、リモコンボタンではなくて、温湿度計を選択してみました(選択肢は、温湿度計、リモートボタン、スマートプラグの3つ)。HUBの1980円割引券も選択できると嬉しかったかな。

冬は時間設定のみで良いですけど、夏になったら温湿度計と連携させ、夜に外気温が下がったらカーテンを少し開ける設定にしようと思います。下がりすぎなら閉じるかな。(窓も自動で開けられるとようにならないかなぁ)

あとはバッテリーの持ちですね。公称では8か月といってますが、どれだけ持つのか。半年程度は持ってくれると嬉しいです。今のところ3週間で86%なので、そこそこ持ちそう?

2021年3月31日水曜日

eRemote mini

 突然、アレクサからコントロールできなくなりました。

「通信できないため応答していません。操作するにはスキルを無効にしてもう一度有効にしてください。」とアレクサが返してきます。

かなり前に、テレビの画面切り替えを「画面」で登録していたものが、音声コントロールできなくなって、アプリを確認したところ、FACEBOOK認証ができなくなり、メアドで再登録すると設定がすべて消えてしまうようになっていて閉口しました。結局「画面」はあきらめて、その他をそのまま音声コントロールしていたのですが。

また、LinkJapanのHPを確認すると「eHomeアプリおよび当社製品においてのIFTTTサービスを、2020年10月31日をもちまして誠に勝手ながら終了とさせていただきます。」とあり、何ができなくなるのかよく分からないのですが、HomeLinkアプリの移行方法が示されています。

やむを得ず、HomeLinkアプリに移行してみることにしました。

ところが何度やってもeRemoteがデバイス登録できず。マニュアルのトラブルシューティングをみて、機内モードでWi-Fiオンにしてトライしたところ、やっとうまく登録できました。

アレクサとの連携もやり直しと。

エアコンは、暖房、冷房、温度を音声で切り替えられますね、いい感じ。

テレビは、音声で、オン、オフ、音量、ミュートなどが使えますね。入力は切り替えられない。

照明も音声で明るさを変えられるのか。色調はダメですね。

安定性がどうなったかしばらく様子を見てみます。