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

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

UwscWebDriver 0.6.0 / stuncloud
https://github.com/stuncloud/UwscWebDriver/releases/tag/0.6.0

変更点

・Byモジュールによりcssセレクタを直接書かなくてもよくなりました
https://github.com/stuncloud/UwscWebDriver/wiki/By%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB
・0.5.0で追加されたWebDriverOptionが使いやすくなりました
https://github.com/stuncloud/UwscWebDriver/wiki/WebDriverOption%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88

この更新に伴い使い方等をWikiに載せました
https://github.com/stuncloud/UwscWebDriver/wiki
これで多少は閲覧性が向上したかと思います

No.1315 2021/06/04(Fri) 14:16:09

Re: UwscWebDriver 0.6.0 / stuncloud
UwscWebDriverについての質問がある場合はこんなフォーマットでしてもらえると助かるな、というのを書いておきました

https://github.com/stuncloud/UwscWebDriver#%E4%B8%8D%E5%85%B7%E5%90%88%E5%A0%B1%E5%91%8A%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88

できればこの形式で質問してもらえると助かります

No.1316 2021/06/04(Fri) 14:18:52

UBrowserControl公開のお知らせ / stuncloud
それと、UwscWebDriverとは別のブラウザ操作用モジュールを公開しています

https://github.com/stuncloud/UBrowserControl

UBrowserControlモジュールです
これはwebdriverが不要で、モジュールだけでブラウザを操作できます
ただし開発中もいいとこで、いろいろと正常に動作しません
こちらはかなり不定期に更新されます
(あまり余力がないので開発が進んでいません)

興味のある方は遊んでみてください

No.1317 2021/06/04(Fri) 14:25:48

Re: UwscWebDriver 0.6.0 / ほいずん
UBrowserControlモジュール、可能性を感じます。

id = Browser.Chrome(9223)では、動作しませんが、9223の意味わからずなので、たぶんここだとは思うのですが、お手すきに教えていただけないでしょうか。

No.1318 2021/06/06(Sun) 18:39:59

Re: UwscWebDriver 0.6.0 / stuncloud
> 意味わからずなので
wiki見てください
https://github.com/stuncloud/UBrowserControl/wiki/%E4%BD%BF%E3%81%84%E6%96%B9#Browser.Chrome
ブラウザのデバッグ用ポートを指定する引数で、ほかのプロセスが使ってないポートを指定する必要があります

> 動作しませんが
どのように動作しないのか教えてもらえると直せたりします

> 可能性を感じます
可能性がありすぎて開発はめっちゃ大変です
webdriverの比じゃなかった!

No.1319 2021/06/06(Sun) 19:56:18

Re: UwscWebDriver 0.6.0 / ほいずん
デフォルト9222としても、待ち受けているプロセスがありません、と出ます。
MsEdgeでは、問題なく動作します。
開発のご苦労は、計り知れないと思いますが、応援します。

No.1320 2021/06/07(Mon) 11:47:38

Re: UwscWebDriver 0.6.0 / stuncloud
> 待ち受けているプロセスがありません、と出ます。

こちらでも再現しました
一度「ファイル名を指定して実行」から
> chrome --remote-debugging-port=9222
とやってみてから試してもらえますか
こちらではその後再現しなくなりました

再現した場合の対処法は今後の課題とします

No.1321 2021/06/07(Mon) 13:16:14

UwscWebDriver 0.7.0 / stuncloud
https://github.com/stuncloud/UwscWebDriver/releases/tag/0.7.0

driver.FindElement() // PascalCase
driver.findelement() // lowercase
driver.FINDELEMENT() // UPPERCASE
driver.findElement() // camelCase
driver.find_element() // snake_case

メソッド名の書き方バリエーションが増えました
JScriptは大文字小文字を区別するため、大文字小文字の違いで未定義エラーが発生します
今回の更新はそのあたりの不便さをやや緩和するためのものです

No.1322 2021/06/07(Mon) 13:23:12

Re: UBrowserControlモジュールについて / yanyan
getdocumentでCOMエラーがでたので、build.uwsをJson2選択で実行したら、UBrouserControl.uwsの中身が下記となってしまいました。お忙しいところ、恐縮ですが、対処をお願いします

----
module UBrowserControl
const Version = "0.0.1"
const Engine = "Json2"
endmodule

-1
-1
-1
-1
-1
-1
-1
-1
(EOF)

No.1323 2021/06/07(Mon) 14:21:46

Re: UBrowserControlモジュールについて / stuncloud
Modulesフォルダがbuild.uwsと同じ階層にないからです
(Modulesフォルダには各種.uwsファイルが含まれます)

ルートフォルダ
 |_src
  |_build.uws
  |_Modules
   |_ (各種モジュールファイル)

という構成でbuild.uwsを実行するとルートに正常なUBrowserControl.uwsが生成されます
build.uwsでファイルチェックを行うようにします
 →しました

No.1324 2021/06/07(Mon) 14:59:52

Re: UBrowserControlモジュールについて / stuncloud
ビルド方法についてreadmeに記載しました
https://github.com/stuncloud/UBrowserControl#%E3%83%93%E3%83%AB%E3%83%89%E6%96%B9%E6%B3%95

今回はドキュメントの不備で説明不足があったことを認めますし反省もしていますが
> お忙しいところ、恐縮ですが、対処をお願いします
まるで不具合であるかのように決めつけて修正を求めるような言い方はやめてください
例えば「このような結果が出ているが原因に心当たりはあるか?」というような質問なら良かったんですよ

しかし今回のように(説明不足だったとは言え結果として)あなたの不手際であったというのに
その点についてはまるで考えがなかったかのごとく、
そして僕が対処するのが当然のごとく「お願い」されても困ります

恐縮してりゃ何言ってもいいってわけじゃあないんだよ

No.1325 2021/06/07(Mon) 15:46:15

Re: UwscWebDriver 0.6.0 / yanyan
この度は、UWSCRの開発でお忙しい中、上から目線的な文言になってしまい申しありませんでした。対処などと、きつい言葉も使ってしまい、本当にすみません。
Dicordでも上げさせて頂きましたが、UwscWebDriverよりも使いやすくなると応援している者です。今後は現象報告とか質問形式となるよう文面に気を付けます。
お忙しい中、素人的な質問ばかりになるかと思いますが、今後ともよろしくお願いします。

今回、Json2に変更し、Chrome対象に実行(chrome --remote-debugging-port=9222も実行)したところ、navigateの途中で 内部のGetTabList処理と思われるエラー
UBROWSERCONTROL.UWS: 92行目: FOR ITEM IN LIST.ToSafeArray()が出力されました。
なおMsedgeではエラーなく、正常にnavigateされています。以上です。

No.1326 2021/06/07(Mon) 17:33:11

(No Subject) / stuncloud
存じております
以前discordでも言い回しが気になったことがあったのでそのへんの不満も込みでした
僕も気にしすぎなのかもしれませんが、かつて精神状態を悪くした結果生活が破たんしたような経験があるので、嫌だと思ったことはなるべく嫌だと表明してみるといった方針で生きながらえています
それが効果的なのかはわかりませんが…
まあその話はいいですね、やめましょう

ご指摘の件はこちらでも把握しており、結果としてToSafeArray()実行時にエラーになっているが実際の原因はjsonのパースに失敗してることだ、ということが最近になってわかってきました
なのでパース処理のエラーハンドリングをもう少し丁寧にやる、そしてそもそもエラーにならないようにするあたりが課題です

このモジュールのキモであるところのdevtools protocolにおけるwebsocketの利用方法について不慣れ…というか正しく扱えているのかすらわかっておらず、そのあたりの知識不足に起因して正しくjsonのやり取りができていない可能性があるという問題があるんですね
他言語の処理を参考にしようにもわからない部分はライブラリに吸収されており、そのライブラリは処理が追いきれず正解がわかりません…
なのでそのあたりがスッと解決しないと完成は程遠い感じです!

No.1327 2021/06/07(Mon) 21:10:52

UwscWebDriver 0.7.1 / stuncloud
https://github.com/stuncloud/UwscWebDriver/releases/tag/0.7.1

WebDriverDownloadを更新しました
chromedriverとmsedgedriverはその時点の最新(安定)版をダウンロードできるようになりました

thanks to しろまささん!

No.1330 2021/06/13(Sun) 17:33:09
Wordの中身をテキストに保存 / sousou
お世話になります。
表題と通り、Wordの中身をテキストに保存するには、どのようにすればいいのでしょうか、
4行目、5行目、何か足りないのでしょうか、動きません、多少なりでもわかる方、ご教授ください。
wd=CreateOLEObj("Word.Application")
wd.visible=True
wd.documents.add
Sheets("Sheet1").Range("A1:B10").Copy
wd.Selection.Copy

No.1328 2021/06/08(Tue) 20:58:19

Re: Wordの中身をテキストに保存 / しろまさ
https://officevba.info/maketxtfile/
これを読んでUWSCに書き直してください(未検証)

No.1329 2021/06/10(Thu) 08:58:11
WebDriver 二段階認証が強制になってしまいます / もも
以前はIEで自動実行していたのですが、最近、サイト構造が変わってちゃんと
表示出来なくなったので、WebDriverにたどり着いてテストしています。

WebDriverでchromeでログインしようとすると必ず二段階認証でSMSメールを要求されてしまいます。
WebDriverでchrome起動後、手動でID/Pass入力しても二段階が来てしまうので、
ログイン作業まで手動にして後からWebDriverに引き継ぎして回避したいのですが、
どのようにすれば良いでしょうか?

サーバーからはWebdriver制御が分かる物なのでしょうか…
よろしくお願いします。

No.1308 2021/06/02(Wed) 16:01:54

Re: WebDriver 二段階認証が強制になってしまいます / stuncloud
・ブラウザ起動用のスクリプト
・ブラウザ操作用のスクリプト
を作成しておき

1. 起動用スクリプトでブラウザを立ち上げ、セッション情報を保存する
2. 認証作業を手動で実行する
3. 操作用スクリプトで保存したセッション情報を読み取り、ブラウザ操作を行う

といった回避手段があるにはあります
セッション情報の保存と読み取りについては以下を参照してください
https://github.com/stuncloud/UwscWebDriver/wiki/%E4%B8%80%E5%BA%A6%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%9F%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%AB%E5%86%8D%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B

また、次回から二段階認証を省くといった設定をブラウザ上で行っても次回起動時にそれが反映されていないということであれば、実行時にChromeのプロファイルを読み込ませておくことで前回の状態を復元できるようになるかもしれません
Chromeプロファイルの指定方法は以下を参照してください
https://github.com/stuncloud/UwscWebDriver/wiki/Chrome%E3%81%A7%E8%87%AA%E5%88%86%E3%81%AE%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%BF%E3%81%86
普段使っている状態のChromeをそのまま使いたい、といった場合もこの方法でOK

> サーバーからはWebdriver制御が分かる物なのでしょうか…
わかるかもしれませんが、今回はそういうことではないと思います
webdriver経由で起動するとまっさらな(初期状態の)ブラウザが立ち上がります、なのでcookieなどもまっさらです
そのため過去にアクセスしてきたブラウザかどうかなどがサーバー側に伝わらないということが考えられます
(なので上に書いたプロファイル読み込みでそのへんを回避できるという仕組み)

No.1309 2021/06/02(Wed) 16:51:42

Re: WebDriver 二段階認証が強制になってしまいます / もも
ありがとうございます!うまく自動ログインできました。

以前の回答も読んでもいまいち理解できなかったのですが、
> webdriver経由で起動するとまっさらな(初期状態の)ブラウザが立ち上がります、
> なのでcookieなどもまっさらです


これでやっと意味と状況が把握できてプロファイル指定しました。

順番が逆になってしまいましたが、本来の質問だった引き継ぎですが、
GetActiveOleObj()で後からIE捕まえられたUWSCで横着を覚えてると
途中からWebDriverに引き継ぐのはちょっと面倒みたいですね…

ところでWebDriverはUWSCのIE_Recで生成されるBusyWait()やIE.Busyなどのように、
更新後の描画待ちの作業はいらないのでしょうか?

あと[Ctrl]+Aでブラウザ内容をコピペしたいので、ブラウザ画面にフォーカスを
与えたいのですが、ただの文字に対してクリックとか出来ますか?
IEの時は画面キャプチャで文字を画像比較してクリックしてたのですが、文字の
キャプチャなのでWin10の綺麗になったレンダリングのせいか同一チェックがしんどい…

No.1310 2021/06/02(Wed) 22:42:53

Re: WebDriver 二段階認証が強制になってしまいます / stuncloud
> ところでWebDriverはUWSCのIE_Recで生成されるBusyWait()やIE.Busyなどのように、
> 更新後の描画待ちの作業はいらないのでしょうか?

原則不要ですが、取りこぼしが生じるようでしたら
repeat
 sleep(1)
 elem = driver.FindElement(selector)
until elem <> NULL
として取得したいエレメントが取得できるまで待つ
という処理を入れることで任意のタイミングで待機ができます

> あと[Ctrl]+Aでブラウザ内容をコピペしたいので、ブラウザ画面にフォーカスを
> 与えたいのですが、ただの文字に対してクリックとか出来ますか?

状況がよくわかりませんがctrl+aはUWSCのsckey()やkbd()を使ってください
任意のエレメントをフォーカスしたいのであればdriver.ExecuteScript()でjavascriptを実行してエレメントのfocus()を叩くといったことは可能です

> IEの時は画面キャプチャで文字を画像比較してクリックしてたのですが、文字の
> キャプチャなのでWin10の綺麗になったレンダリングのせいか同一チェックがしんどい…

表示文字列の比較をなぜ画像で行っているのかいまいちわかりませんが
ある文字を含む要素を探すのであればelement.GetText()でテキストを取って
UWSCのpos()関数で有無を調べるといった方法が画像も不要で楽ではないかと思われます

canvasに描画されている、ということであればその方法は使えませんが…
その場合は画像を用いるのが最適解だという気はします

No.1311 2021/06/03(Thu) 01:27:07

Re: WebDriver 二段階認証が強制になってしまいます / もも
おせわになります…

IEは(chromeも?)、URL開いたりしたら、画面遷移直後はブラウザの
描画面にフォーカスが無いので、

ScKey(IE_ID, VK_CTRL, VK_A) //Ctrl+A

これが動かないので、事前にブラウザの描画面を
適当にクリックしてCtrl+Aが効くようにフォーカスを当てたいのです。

エレメントがよく分かってないのですが、
クリックしたいのは地の文(何の効果もタグも無いただの文章)です。

https://www.google.com/webhp?hl=ja
の左下の「日本」とか。(これはclass指定で叩けそう?)

描画面にフォーカスがいってScKey()が効くようになればなんでもいいんですが
他に方法が思いつきません…

>表示文字列の比較をなぜ画像で行って
スキルが足りなくて、スライドして出てくるクリック選択肢等の解析を諦めて
画面キャプチャして該当部分を画像切り出して画像判別で選択肢クリックを
実現しているからです。ハンバーガアイコンから出てくるメニューとか

No.1312 2021/06/03(Thu) 15:40:00

Re: WebDriver 二段階認証が強制になってしまいます / stuncloud
> IEは(chromeも?)、URL開いたりしたら、画面遷移直後はブラウザの
> 描画面にフォーカスが無いので、

ctrlwin()でactivateしてください

一応バックグラウンドであってもctrl+aからのコピー的なことはできます

// 画面に描画されている文字列を全部取得
alltext = driver.FindElement("body").GetText()

> エレメントがよく分かってないのですが、
> クリックしたいのは地の文(何の効果もタグも無いただの文章)です。

エレメントというのはタグのことだと思ってもらってほぼ大丈夫です
(タグそのもののオブジェクトというか)

地の文といってもdivなりpなりなにかしらのタグに入っているはずなので
そのエレメント(タグのオブジェクト)を取ってこれれば情報が抜き出せるということです
タグの指定方法は

driver.FindElement("div") // divタグ
driver.FindElement(".hoge") // class="hoge"
driver.FindElement("div.hoge") // class="hogeのdiv
driver.FindElement("#fuga") // id="fuga"

というように、cssセレクタと呼ばれる文字列を指定します
cssセレクタに関しては解説サイトがごまんとあるのでそちらで確認してみてください
ちなみに上に書いた
> alltext = driver.FindElement("body").GetText()
はbodyタグ以下の文字コンテンツを全部取る、ということをしています

> の左下の「日本」とか。(これはclass指定で叩けそう?)
クラス名が一意なので直接それを指定します

driver.FindElement("div.uU7dJb").Click()

googleのトップページを開くと検索テキストボックスがフォーカスされていますが
これを実行するとそのフォーカスが外れることが確認できると思います


> スキルが足りなくて、
これを言われるとこちらとしても返す言葉がありません、正直
UWSCWebDriverはその言葉を借りれば「スキルのある人向け」です
・HTMLに理解がある
・DOMに理解がある
・CSSセレクタに理解がある
・開発者ツールが使える
程度のことができる人を想定してます
(そういう人を想定しているという注意書きはありませんけど)
なので、スキルがないのでわかりません、ということであれば
ではスキルを獲得していただく必要があります、としか返せません

ですので現状スキル不足の認識があるのでしたら
できる範囲でやっていただくしかないです
> スライドして出てくるクリック選択肢等の解析を諦めて
> 画面キャプチャして該当部分を画像切り出して画像判別で選択肢クリックを
> 実現しているからです。ハンバーガアイコンから出てくるメニューとか

つまりこのようなことを引き続きやるしかない、ということになります
(まぁ、UWSCはこうした創意工夫をやれる余地があるのでそれを最大限やるのは良いことです)

とは言えそういう方を突き放そうとかそういうことではないので
(さすがに掲示板で上記のスキルを得られるまでのサポートは無理ですが)
今一番やりたいことで実現できていないものがあるのならば
・対象サイトの情報 (urlやその他補足情報)
・何をしたいか (操作の順序、得たい情報の詳細)
あたりを教えていただければ具体的なコードの提示も可能です

No.1313 2021/06/03(Thu) 17:35:24

Re: WebDriver 二段階認証が強制になってしまいます / もも
stuncloud 様

せっかく対応していただいてるのに不快にさせてしまったようで申し訳ないです。

> > スキルが足りなくて、
> これを言われるとこちらとしても返す言葉がありません、正直


これは、自分がとても低レベルの対処をしててstuncloud様に理解されなかったのだろうと
申し訳ない気持ちで「実はこういうことをしています」という説明を書いたつもりでした。
無知を開き直ったり対処を強引に要求しているつもりはありません。

> ですので現状スキル不足の認識があるのでしたら
> できる範囲でやっていただくしかないです


これは当然と考えてます。ただでさえ付き合っていただいてて申し訳ない感じですし…

最初に書いてたように、IEで実現していた内容をChromeで焼き直そうとしていて、
はまったログインさえ突破できれば、後はたぶん作れるんですが、
せっかくならスマートで無い部分も綺麗に出来ればと興味本位で質問していました。


> > IEは(chromeも?)、URL開いたりしたら、画面遷移直後はブラウザの
> > 描画面にフォーカスが無いので、
> ctrlwin()でactivateしてください


driver.Navigate("http://example.selenium.jp/reserveApp_Renewal/")
Chrome_ID = GetID("Google Chrome","Chrome_WidgetWin_1",-1)
CtrlWin(Chrome_ID, ACTIVATE) //Chromeを前面に
CtrlWin(Chrome_ID, MAX) //Chromeを最大化
Sleep(2)
ScKey(Chrome_ID, VK_CTRL, VK_A) //Ctrl+A
ScKey(Chrome_ID, VK_CTRL, VK_C)
//こんな感じにしてみましたがダメでした。しかし下のbody取得でうまくいきそうです。

> // 画面に描画されている文字列を全部取得
> alltext = driver.FindElement("body").GetText()

bodyよりCtrl+Aの方が画面通りに取れて後加工が楽なので多用してましたが、
今回試したらbodyでも問題なさそうです。試してみるもんですね。

> 地の文といってもdivなりpなりなにかしらのタグに入っているはずなので
> そのエレメント(タグのオブジェクト)を取ってこれれば情報が抜き出せるということです

有りました。

> とは言えそういう方を突き放そうとかそういうことではないので
> (さすがに掲示板で上記のスキルを得られるまでのサポートは無理ですが)


相手していただいてるだけでもありがたいです。
会社では合間にしかテストできず、家は環境が無い為、
テストより質問が先行していて申し訳ないです。

> ・対象サイトの情報 (urlやその他補足情報)

決して迷惑系ではないのですが、書いてしまうと、それはそれでこちらに
障りがありそうなので書かないのがマナーかなと考えてます。
具体的な提示が何も無いのに対応していただいてて感謝です。

No.1314 2021/06/04(Fri) 02:14:35
UwscWebDriverでedgeを非表示で起動したいです。 / hiro
お疲れ様です。

InternetExplorerをCOMオブジェクトの場合は、

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = False

ですが、UwscWebDriverでEdgeを非表示で起動したいのですが、
ご教授よろしくお願いいたします。

No.1301 2021/05/25(Tue) 01:50:35

Re: UwscWebDriverでedgeを非表示で起動したいです。 / stuncloud
headlessモードで起動する必要があります
そのためにはcapabilities(起動オプションや設定などを定義したjson)を自分で書く必要があります

以下がChromeの例です
https://github.com/stuncloud/UwscWebDriver/wiki/Headless-chrome%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B

ChromiumベースのMS Edgeであればargsにheadlessを指定することでheadless(非表示)モードにできるのではないかと思われます
https://docs.microsoft.com/ja-jp/microsoft-edge/webdriver-chromium/capabilities-edge-options#%E8%AA%8D%E8%AD%98%E3%81%95%E3%82%8C%E3%82%8B-capabilitiesrecognized-capabilities
> Microsoft Edge 固有の Capabilities は、ほとんどが EdgeOptions オブジェクトを通じて発行され ます。 一部の言語では、Capabilities は EdgeOptions クラスによって実装され ます。 他の言語では、Capabilities は DesiredCapabilities の ms:edgeOptions ディクショナリの下に保存され ます。
とのことですので、Chromeの例にある goog:chromeOptions の部分を ms:edgeOptions に書き換えればそのまま動くかもしれません
あとbrowserNameをchromeではなくmsedge?だとかに書き換える必要もあるかもしれないです

憶測ばかりで申し訳ありませんが、このあたりの機能は「わかってる人」向けになってまして、僕もそこまで詳しく把握していないためにこのような回答しかできないのです
UWSCWebDriverの機能として非表示実行を用意できればいいのですが、今のところ全く余力がないため更新予定はありません
ご不便をおかけしますがご了承ください

No.1302 2021/05/25(Tue) 04:05:46

Re: UwscWebDriverでedgeを非表示で起動したいです。 / stuncloud
こちらもwikiに具体的な方法を書きました

https://github.com/stuncloud/UwscWebDriver/wiki/MsEdge%E3%81%A7%E3%83%98%E3%83%83%E3%83%89%E3%83%AC%E3%82%B9%E5%AE%9F%E8%A1%8C

No.1305 2021/05/28(Fri) 23:24:34

Re: UwscWebDriverでedgeを非表示で起動したいです。 / hiro

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

これで、IEが無くなる前にEdgeで何とかなりそうです。

No.1307 2021/06/02(Wed) 00:41:31
UwscWebDriverにて既存のprofileを指定して起動 / nis
こんにちは

chromeにて2段階認証のあるサイトを自動化したいので、既存のprofileを指定して起動しようと思い、色々調べてみましたが見つかりません

何か方法があればご教授お願い致します。

No.1303 2021/05/28(Fri) 21:17:30

Re: UwscWebDriverにて既存のprofileを指定して起動 / stuncloud
この手の情報はSeleniumでやっているのを探すと見つかります
selenium chrome profile
で検索したところ以下が見つかりました

https://qiita.com/Hidenatsu/items/e43ba04b4b5f710784e6

要約するとchromeの起動オプションでプロファイルを読み込ませればいいということがわかります
> --user-data-dir={プロファイルのあるディレクトリ}
> --profile-directory={プロファイル名}

が渡っていれば良いということになります

UwscWebDriverでこの手のことをやる場合はcapabilitiesを自分で作成し指定する必要があります
https://chromedriver.chromium.org/capabilities#h.p_ID_102

> capabilities.alwaysMatch.goog:chromeOptions.args[]
が起動オプションを書く場所です

とまぁおそらくこの説明ではせんぜん伝わらないのでしょうからwikiに具体的なのを書いておきました

https://github.com/stuncloud/UwscWebDriver/wiki/Chrome%E3%81%A7%E8%87%AA%E5%88%86%E3%81%AE%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%BF%E3%81%86

さらにオプションを加えたいという場合はこれを参考にcapabilitiesを記述してみてください

No.1304 2021/05/28(Fri) 23:08:46

Re: UwscWebDriverにて既存のprofileを指定して起動 / nis
上手く起動しました
コードまで記載して頂きありがとうございます
助かりました!!

No.1306 2021/05/28(Fri) 23:42:45
webページのソース取得 / ssk
無限スクロールのwebページで、
最下部までの全体のソースが欲しいのですが、
したのコードでは、1ページのみしか取得出来ないようですが
他に方法はありますか?


//---実行部分
url = "https://***"
source = GetPage(url)

MSGBOX("バイト数:" + LENGTHB(source))


//---関数部分 ウェブページのソース取得
Function GetPage(PageURL)
  msXMLhttp = CREATEOLEOBJ("Microsoft.XMLhttp")
  msXMLhttp.open("GET", PageURL, 0) //async=false(=0)
  msXMLhttp.send()
  Result = msXMLhttp.responseText
Fend

No.1299 2021/05/14(Fri) 01:29:53

Re: webページのソース取得 / stuncloud
> 他に方法はありますか?
Google Chromeなどを利用したスクレイピングになるかと思います
しかし、スクロール時に表示される部分の取得はWebサイトごとの実装によって変わると思われるため、具体的な方法の提示はできません
おおまかな流れとしては、スクロールをして追加された部分を検出してそのOuterHTMLを得る、という感じでしょうか
> スクロールをして追加された部分を検出
がページの実装によって変わります

なお、ソース取得というよりデータ取得が本来の目的でああるのならば、上記を行う過程で必要なデータを抽出するほうが楽です
(ソースからデータを得る場合別途解析処理が必要になるため)

No.1300 2021/05/14(Fri) 09:14:36
日付の形式を変え、日本時間に直したい。 / YMK
お世話になります。

"Mon May 10 07:10:03 +0000 2021"
で与えられたときに、2021/05/11 16:10:03
の形式にしたいのですが、行き詰まってしまいます。

str = "Mon May 10 07:10:03 +0000 2021"

obj = CreateOleObj("ScriptControl")
obj.Language = "VBScript"
年 = obj.Eval("Right(<#dbl>" +str +"<#dbl>,4)") //後ろ4文字
年月日 = 年 +copy(str,4,7)
日時 = 年月日 +copy(str,11,9) // 2021 May 10 07:10:03

//cdate関数
日付 = obj.Eval("cdate(<#dbl>"+ 日時 +"<#dbl>)") //日付に変換

msgbox(VarType(GetTime(0.375,日付)/86400 +36526, VAR_DATE)) //日本時間に修正

日付までは上手く取得で出きるのですが、日本時間に修正が出来ません。

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

No.1295 2021/05/12(Wed) 01:46:51

Re: 日付の形式を変え、日本時間に直したい。 / stuncloud
> "Mon May 10 07:10:03 +0000 2021"
を "Mon May 10 07:10:03 UTC+0000 2021" に書き換えればjscriptで処理できるのでそれを使います

str = "Mon May 10 07:10:03 +0000 2021"
日付 = replace(str, "+", "UTC+")
with createoleobj("ScriptControl")
 .Language = "jscript"
 .ExecuteStatement(jsDateFormat)
 .ExecuteStatement("var d = new Date('" + 日付 + "');") // Mon May 10 07:10:03 UTC+0000 2021 ならnew Date()できる
 // d = .Eval("d.toLocaleString()") // 2021年5月10日 16:10:03
 d = .Eval("formatDate(d)")
 msgbox(d) // 2021/05/10 16:10:03
endwith

// yyyy/MM/dd hh:mm:ss形式にする関数
textblock jsDateFormat
function formatDate(date) {
var f = date.getFullYear() + '/' +
('00' + (date.getMonth() + 1)).slice(-2) + '/' +
('00' + date.getDate()).slice(-2) + ' ' +
('00' + date.getHours()).slice(-2) + ':' +
('00' + date.getMinutes()).slice(-2) + ':' +
('00' + date.getSeconds()).slice(-2);
return f;
}
endtextblock

No.1296 2021/05/12(Wed) 12:15:55

Re: 日付の形式を変え、日本時間に直したい。 / miles
> msgbox(VarType(GetTime(0.375,日付)/86400 +36526, VAR_DATE)) //日本時間に修正
日付の時間が、" 7:10:03" でエラーになっている。
(It is wrong date:2021/05/10 7:10:03) -> (正) 07:10:03

> 日付 = obj.Eval("cdate(<#dbl>"+ 日時 +"<#dbl>)") //日付に変換
日付 = obj.Eval("cdate(<#dbl>"+ 年月日 +"<#dbl>)") + copy(str,11,9) //日付に変換
にしたら、どうですか?

No.1297 2021/05/12(Wed) 20:42:32

Re: 日付の形式を変え、日本時間に直したい。 / YMK
>stuncloud さん
有難うございます、動作できました。
色々分からない関数がありましたので、自分で調べようと思います。

>miles さん
年月日部分だけをcdate関数に入れたら良かったんですね。
有難うございます。

No.1298 2021/05/13(Thu) 00:42:49
SCKEY キーを変数で入力 / tracky
エクセルからWSHを使ってキー操作を引数として実行することを考えています。
試しに改ページ画面にする操作でテストしています。

この2つは動作します。
SCKEY(ID,164,87,73)
SCKEY(ID,VK_LMENU,VK_W,VK_I)

しかし、キーを変数にしたときは動作しませんでした。
KeyStr="164,87,73"
SCKEY(ID,KeyStr)

KeyStr="VK_LMENU,VK_W,VK_I"
SCKEY(ID,KeyStr)

どうすれば動作できるか教えて頂けると助かります。
よろしくお願いします。

No.1292 2021/04/30(Fri) 21:12:36

Re: SCKEY キーを変数で入力 / stuncloud
sckeyが受けられる文字列はアルファベット一文字のみです

変数に入れたいのであれば本来なら

key1 = 164
key2 = 87
key3 = 73
sckey(id, key1, key2, key3)



dim keys[] = VK_LMENU,VK_W,VK_I
sckey(id, keys[0], keys[1], keys[2])

といった感じでやるしかない、ということになってます
…が!
あえてカンマ区切りの文字列でやりたいというのであれば
こんな方法があります

KeyStr="VK_LMENU,VK_W,VK_I"
eval("sckey(id, " + KeyStr + ")")

お試しあれ
(この場合カンマ区切りじゃないとできません)
(仕組みに興味があるならヘルプでevalを調べてみてね)

No.1293 2021/04/30(Fri) 22:10:54

Re: SCKEY キーを変数で入力 / tracky
stuncloudさん、早速ご回答ありがとうございます。

押下するキーの個数が一定ではないのでevalを調べて使ってみようと思います。
助かりました!!

No.1294 2021/05/01(Sat) 17:36:02
chromeで指定の箇所に任意の文字を入力したい / yoshi
htmlが『<input class="input-default" value="7880" placeholder="例)300">』の7880の場所を任意の数字に入れ替えたいと思っています。

uwscdriverのsampleから

with driver.FindElement("#input-default")
.Clear()
.SetValue("6880")

これかなと思いましたがうまくいきませんでした。


ちなみにuwscproのRecIEからIEで設定すると
IESetData(IE,"6980","","",3) // TEXT
になる箇所です



ご教示いただけますと幸いです。

No.1284 2021/04/21(Wed) 21:39:08

Re: chromeで指定の箇所に任意の文字を入力したい / stuncloud
> "#input-default"
classなので#ではなく.です
".input-default"
でやってみてください

No.1285 2021/04/22(Thu) 08:25:21

Re: chromeで指定の箇所に任意の文字を入力したい / yoshi
> > "#input-default"
> classなので#ではなく.です
> ".input-default"
> でやってみてください


".input-default"に入れ書いて実行してみましたが、やはりできませんでした

with driver.FindElement(".input-default")
.Clear()
.SetValue("6880")

No.1286 2021/04/22(Thu) 13:49:32

Re: chromeで指定の箇所に任意の文字を入力したい / yoshi
> > > "#input-default"
> > classなので#ではなく.です
> > ".input-default"
> > でやってみてください
>
> ".input-default"に入れ書いて実行してみましたが、やはりできませんでした
>
> with driver.FindElement(".input-default")
> .Clear()
> .SetValue("6880")



with driver.FindElement(".input-default")
.Clear()
.SetValue("6880")
endwith

msgbox("確認")


『確認』表示まで行くのですが、『6880』への入れ替えが上手くいかない状態です

No.1287 2021/04/22(Thu) 17:27:04

Re: chromeで指定の箇所に任意の文字を入力したい / yoshi
> > "#input-default"
> classなので#ではなく.です
> ".input-default"
> でやってみてください



該当HTML内に
『<input class="input-default"』が3か所ありました。

これも影響しているでしょうか?

その場合、n個目のように指定することは可能でしょうか?

No.1288 2021/04/22(Thu) 18:12:29

Re: chromeで指定の箇所に任意の文字を入力したい / stuncloud
> class="input-default"
は一意ですか?
ほかに同じクラスのエレメントがある場合そちらが取得されるという可能性があります

".input-default[value=<#DBL>7880<#DBL>]"
とするなどセレクタをなるべく一意になるようにするか、FindElements()でエレメント群を取得し、その中で値の変更を行いたいものにだけSetValue()する、といったことを試してください

一番はchromeで該当ページを開いてF12キーを押し、開発者ツールを開いてそこで試してみることです
開発者ツールのコンソール画面で
document.querySelector("任意のセレクタ")
を実行し、該当エレメントの取得に成功するようにcssセレクタを調整していきます
そこでうまくいったセレクタであれば、driver.FindElementにも使えます
そもそもcssセレクタがわからない、ということですと想定されている利用者の枠を越えますので、サポート対象外とさせていただきます

cssセレクタの問題ではなくUWSCWebDriverの不具合を疑っている、という趣旨であれば
・使っているUWSCWebDriverのバージョン
・対象のウェブページのURL
・書いたコードすべて
をご提示ください
その情報をもって不具合の調査を行います

No.1289 2021/04/22(Thu) 18:19:52

Re: chromeで指定の箇所に任意の文字を入力したい / stuncloud
書き込んでる間に追加投稿ありましたね
> 該当HTML内に
> 『<input class="input-default"』が3か所ありました。

はい、そのため希望の箇所とは異なるエレメントが取得されたものと思われます
該当箇所をピンポイントで示すセレクタを書くことも可能ですし、↑に書いたようにFindElements()でclass="input-default"に該当する3つのエレメントを配列で取得し、forとifで条件に合うものだけにSetValue()する、といった方法でもできます

No.1290 2021/04/22(Thu) 18:24:35

Re: chromeで指定の箇所に任意の文字を入力したい / yoshi
> 書き込んでる間に追加投稿ありましたね
> > 該当HTML内に
> > 『<input class="input-default"』が3か所ありました。
> はい、そのため希望の箇所とは異なるエレメントが取得されたものと思われます
> 該当箇所をピンポイントで示すセレクタを書くことも可能ですし、↑に書いたようにFindElements()でclass="input-default"に該当する3つのエレメントを配列で取得し、forとifで条件に合うものだけにSetValue()する、といった方法でもできます



色々とご教示頂きありがとうございます
これまでuwscproと過去の掲示板やネット情報をあさり陳腐な知識でもなんとか自動化してきましたが、UwscWebDriverの利用が初めてで、とても参考になります

ありがとうございました

document.querySelector("任意のセレクタ")を使ったことがないので、調べながらいろいろと試してみます。

No.1291 2021/04/22(Thu) 19:58:59
Uwscwebdriverについての質問 / salsalk
?@submitのボタンがクリックできない
driver.FindElement("btn btn_next").click()
driver.FindElementNameなどのいくつかを試してみましたが
「COM_error例外が発生しました」とメッセージがでてクリックできません。

<input type="submit" name="sbmtok" value="次へ" class="btn btn_next">


?AUwscwebdriverでUserAgentを変える
seleniumみたいにUser-Agentを変更してfirefox起動すること
は可能ですか。

回答をよろしくお願いします。

No.1275 2021/04/19(Mon) 14:55:45

Re: Uwscwebdriverについての質問 / stuncloud
> driver.FindElement("btn btn_next").click()

driver.FindElement(".btn.btn_next").click()
です、cssセレクタでクラスを表すには .クラス名 と記述します
複数ある場合は .クラス名1.クラス名2.クラス名3 というように連結します

COMエラーになるのは driver.FindElement("btn btn_next") がnullを返すためで
> null.click()
をやっているためです
btn = driver.FindElement("btn btn_next")
if btn <> null then
 btn.click()
endif
のような記述を推奨します


> seleniumみたいにUser-Agentを変更してfirefox起動すること
> は可能ですか。

可能なはずです
おそらくuseragentはcapabilitiesに書き込めると思います
capabilitiesを指定してWebDriverを実行するには

capabilities = // useragent を含むcapabilitiesを表すjson文字列
driver = WebDriver.Firefox(9515, capabilities)

のように記述します

capabilities指定については分かる人向けなので解説書いてないんですよね
(僕もよく分かってない)
chromeのヘッドレスモードであれば
https://github.com/stuncloud/UwscWebDriver/wiki/Headless-chrome%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B
みたいな使い方をします

firefoxなら
https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions#example
のように書くようです
通常useragentの変更はabout:configを使うらしいので、それをcapabilitiesでやるとなると
先の例のprefsに書き込めば良さそうです

どのような値を書き込むのかというと
http://kb.mozillazine.org/About:config_entries#General.
にある general.useragent.override のようです (意味はまんまuseragent上書き、ですね)
なのでuseragentを変更するcapabilitiesのjsonは

{
 "capabilities": {
  "alwaysMatch": {
   "moz:firefoxOptions": {
    "prefs": {
     "general.useragent.override": "任意のuseragent"
    },
   }
  }
 }
}

こんな感じになるのかな? (jsonなので全角スペースは半角スペースにしないとだめです)
capabilitiesについては先のリンクに詳しく書かれているのでいろいろ試してみてください

No.1276 2021/04/19(Mon) 16:04:20

Re: Uwscwebdriverについての質問 / salsalk
stuncloudさん、早速ご回答ありがとうございます。

submitの件ですが、ご提示いただきました

btn = driver.FindElement("btn btn_next")
if btn <> null then
 btn.click()
endif

を試しましたが、やはりCOMエラーが出ます。
たぶんなのですが、idがわからないので
idがある要素ではできるのではと思います。

driver.FindElementsByNameというコードはありますが、
Elementsと複数のため、driver.FindElementByNameでは
不明ですのエラーが出ます。


User-Agentの変更の件ですが
先頭にcapabilitiesを定義しなければいけないと
思うのですが、ほとんどわかっていないため、
どういう風に定義するのかわかりません。

{
 "capabilities": {
  "alwaysMatch": {
   "moz:firefoxOptions": {
    "prefs": {
     "general.useragent.override": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C92 Safari/602.1"
    },
   }
  }
 }
}


もう少し、詳細を教えて頂ければ幸いです。

No.1279 2021/04/20(Tue) 17:48:03

Re: Uwscwebdriverについての質問 / stuncloud
> btn = driver.FindElement("btn btn_next")
> if btn <> null then
>  btn.click()
> endif

こう書けばbtnがnullの場合はクリックしないよ、という例です
> "btn btn_next"
ではnullになるのでクリックされません
正しいセレクタの書き方はすでに示していますので、書かれている内容をよく読んでください
COMエラーについてはもしかしたら不正なセレクタを指定したために発生しているのかもしれませんが、せめてどの行で起きたかを教えていただけないとはっきりは言えません

> もう少し、詳細を教えて頂ければ幸いです。
複数行テキストなのでtextblockで書いておくと良いでしょう

textblock capabilities
{
 "capabilities": {
  "alwaysMatch": {
   "moz:firefoxOptions": {
    "prefs": {
     "general.useragent.override": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C92 Safari/602.1"
    },
   }
  }
 }
}
endtextblock
driver = WebDriver.Firefox(9515, capabilities)

※ textblock内の全角スペースはエラーの原因になるので必ず半角スペースに直してください


ところで、capabilities指定については分かる人向けであり、その内容についてのサポートはあまりしない方針です
なぜこのようなことを言い出すのかというと、先に示したcapabilitiesではパラメータの不足などにより正常に機能しないということもあり得ますがその点についての回答はしかねるという話です
申し訳ないんですがcapabilitiesの細かい設定に関してはご自身で調べてください

No.1280 2021/04/20(Tue) 20:31:37

Re: Uwscwebdriverについての質問 / stuncloud
COMエラーについてですが、なにか予期せぬバグが生じた可能性があるので

try
 // COMエラーになるコードをここに書く
except
 print WebDriver.GetError()
endtry

としてprint窓に出力されたものを貼ってください

No.1281 2021/04/20(Tue) 20:59:45

Re: Uwscwebdriverについての質問 / salsalk
stuncloudさん、ご回答ありがとうございます。

ご提示されました
driver.FindElement(".btn.btn_next").click()
はエラーだったので違うと勘違いしてました。すみません。


> COMエラーについてですが、なにか予期せぬバグが生じた可能性があるので
>
> try
>  // COMエラーになるコードをここに書く
> except
>  print WebDriver.GetError()
> endtry
>
> としてprint窓に出力されたものを貼ってください


実行しましたが、小窓には文字は表示されずに、すぐに消えます。
なので手動ですが、

COM_Error:名前が不明です。
DRIVER.FindElement(".btn.btn_next").click()

COM_Error:例外が発生しました。
DRIVER.FindElement(".btn_set btn").click()

あれから、少し調べて、.btn_set btn が正しいとは思うのですが....


windows8.1
Firefox Brower 87.0 (64ビット)
WebDriver geckodriver-v0.29.1-win64.zip
サンプルコードは実行することができました



User-Agentの変更の件ですが、やはりエラーがでました。

COM_Error:例外が発生しました
123行目:RESULT = CODEOBJECT.WebDriver.Start(URI,CAPABILITIES,DEBUG)

いろいろと試しましたが、よくわかっていないため、諦めます。
お時間、お手数をおかけしまして、申し訳ございませんでした。
ありがとうございました。

No.1282 2021/04/21(Wed) 17:50:45

Re: Uwscwebdriverについての質問 / stuncloud
どうやらそもそもUWSCの使い方もよくわかっていないようですね
FirefoxであればSelenium IDEを使うといった手段もありますので、ご自分に合った方法をお試しください

No.1283 2021/04/21(Wed) 19:36:41

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

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

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

Rocket Board Type-X (Free) Rocket BBS