[ 掲示板に戻る ]

過去ログ閲覧モード

Selenium.Wrapperと連携したChrome操作の、別タブ操作 / レイン
投稿初めてです。よろしくお願いします。

標題にある通り、Seleniumというモジュール?をUWSCで使用して、Chromeブラウザを操作するプログラムを作成中なのですが、Chrome上で別タブでURLのページを開き、その画面の内容を別途操作したり取得する必要があるのです。
※Javascriptで開いたページ内のHTMLを解析する動きをします。

Chrome起動→最初からあるタブでURLにアクセス→中身のタグを解析→必要なら値取得やページ内のリンクをクリック

というIEでも可能な基本操作は既に出来ているのですが、別タブでもうひとつURLにアクセスし、同時に複数のページ内の要素を解析するという方法がUWSC上で出来るやり方がうまく見つからなくて困っています。。。

もしご経験のある方、もしくはこの関数は試すべき?などのアドバイスがございましたら、是非ご教授くだされば幸いです。

よろしくお願いします。

動作環境: Windows7 (windows updateはサービスパックや.net frameworkなど必要な内容があればインストールします)
Chromeのバージョン:基本自動更新で最新です。
SeleniumWrapperのバージョン:v1.0.23.0

No.2343 2016/04/21(Thu) 18:34:53

Re: Selenium.Wrapperと連携したChrome操作の、別タブ操作 / stuncloud
とりあえず思いついたことだけ書いときます
>※Javascriptで開いたページ内のHTMLを解析する動きをします。
window.openで別タブが開かれるということですかね?
別タブで開かれるページのwindow.nameを調べておいて、予めその名前のwindowをSeleniumで作成しておけば制御下のwindowに対象URLが開かれることになるはずなので、あとは自由に操作できます
(ただ、targetで_blankを指定してるとこの方法ではダメ)

UWSCは関係なくSeleniumの話なので、より多くの情報が必要であればここ以外の適した場所で質問されるほうが良いかと思います

No.2344 2016/04/22(Fri) 10:20:39

Re: Selenium.Wrapperと連携したChrome操作の、別タブ操作 / レイン
そうですね。seleniumによるChromeのオブジェクトを二つ宣言して、それぞれウィンドウを作成すればよいかもしれません。
IEを操作する場合でしたら、私もよくIEのオブジェクトを二つ作成して、それぞれにウィンドウを作成してやりとりさせています。

ただ記述を失念しておりました内容がございまして、開いたURLのページにおいてログイン(セッション発生させる)を
する必要がありまして、別タブで開きたい二つ目のURLのページは、セッションを維持していないと閲覧できないのです。
※都度その二つ目のタブで開きたいページにアクセスすればよいのでは?となるかもしれないのですが、いかんせんその画面を
開くのが遅くて難点な状況でございます。。。内容をテキストでローカルに保存するのも常に情報が切り替わるのであまり効率が上がらず、
悩んでいる次第です。。。

なので、同一ウィンドウで別タブで二つ目のURLにアクセスさせておきたかった次第になります。

もしかしたらChrome終了の命令をしない限り、二つのウィンドウがセッションを共有している場合も
あるかもしれないので試してみます。

Seleniumの英語マニュアルを見たり参考例を探したりしていたのですが、なかなか答えやヒントが見つからなかったので
質問させていただいた次第でございます。
確かに、よりSeleniumに特化した場所に質問してみるべきだったかもしれないですね。。。

ご回答ありがとうございます!

No.2349 2016/04/22(Fri) 15:16:20

Re: Selenium.Wrapperと連携したChrome操作の、別タブ操作 / stuncloud
そうでした、セッションも面倒なんですよね…
>もしかしたらChrome終了の命令をしない限り、二つのウィンドウがセッションを共有している場合もあるかもしれないので試してみます。
うまくいくといいですね!

>Seleniumの英語マニュアルを見たり参考例を探したりしていたのですが、なかなか答えやヒントが見つからなかった
ときどきこういった質問があるのは見つかるんですが、解決策ってないんですよね…
ここしばらくSelenium触ってないので最近のバージョンだったらうまいことサポートしてくれたりしてないかな、なんて淡い期待をしてたりするんですがそうもいかないようですね
ニーズ自体ないわけではないので近い将来どうにかなるとイイナ

No.2351 2016/04/22(Fri) 16:12:30

Re: Selenium.Wrapperと連携したChrome操作の、別タブ操作 / stuncloud
ついさっき職場の同僚がポップアップが処理出来ないというので改めて調べてみたところ…わりと簡単に出来ちゃいました、なんてこったい
Selenium Basicでのサンプルコードをgistに載せておきました

https://gist.github.com/stuncloud/768c2d8a2f3cf1732d34d5cfe155d1a8

SwitchToWindowByTitle()がキモでした
SwitchToWindowByName()というのもあります

No.2353 2016/04/25(Mon) 16:16:00
画像参照 / 嚥
いつも大変重宝し使わせて頂いております。

画像の参照ボタンなのですが、
サイトによっては、画像参照を押したあとに、送信ボタンを押しても反応しなくなってしまう(参照まで自動で動かして、その後手動で送信を押しても)サイトがまれにあり、画像参照をすることができないのですが、参照ボタンの押し方を色々変えたりしても、できない場合があります。
このような場合は、どのように対処したらいいのでしょうか?
申し訳ございませんが、どなたか対処方法を教えていただけないでしょうか?
よろしくおねがいします。

No.2352 2016/04/25(Mon) 02:00:44
ifの条件をandで増やすと動かない? / むーたん
初歩的ですいません。
ifb ○○ and ○○
とandで2つ以上の条件を足すと思った通りの挙動をしないことがあります。
前はこれでいけた記憶があるんですが、書き方が悪いのでしょうか?
ちなみにandではなくorだと追加しても大丈夫だったりしました。

下記では2つとも「発見した」の結果を得たいのですが、case1では発見、case2では見つからないが返ってきます。どう直したらいいのでしょうか?

str="山田君と一緒に焼き肉を食べに行きました。"

//case1
ifb pos("山田",str) then
print "山田を発見"
else
print "見つからない"
endif

//case2
ifb pos("山田",str) and pos("焼き肉",str) then
print "山田と焼き肉を発見"
else
print "見つからない"
endif

No.2345 2016/04/22(Fri) 14:11:03

Re: ifの条件をandで増やすと動かない? / しき
//0<pos("山田",str) のようにする
str="山田君と一緒に焼き肉を食べに行きました。"
ifb 0<pos("山田",str) and 0<pos("焼き肉",str) then
  print "山田と焼き肉を発見"
else
  print "見つからない"
endif


//and はビット演算
str="山田君と一緒に焼き肉を食べに行きました。"
a = pos("山田",str)
b = pos("焼き肉",str)
c = (a and b)
print a   //1 //2進数 0001
print b   //8 //2進数 1000
print c   //0 //2進数 0000


pos()関数は、発見した文字位置を返します
1 と 8 のandをとると、0 になります
ifb の判定は、0は偽、0以外は真 ですので、
"見つからない" となります

参考URL
ビット演算
http://www.eonet.ne.jp/~nao2/c/c_bitsoperation.htm
1)ビットごとの論理積【and】(演算記号 &)

No.2346 2016/04/22(Fri) 15:05:43

Re: ifの条件をandで増やすと動かない? / stuncloud
ifb (pos("山田",str) > 0) and (pos("焼き肉",str) > 0) then

とするのが確実です

posが数値を返すので、それぞれの値の論理積がifで評価されます
なのでたまたまTRUEになる場合もありえます(が、それが期待通りの結果になっているとは限りません)
例: str="山田君と一緒に隣駅へ焼き肉を食べに行きました。"
∵ 1 and 11 = 1

No.2347 2016/04/22(Fri) 15:10:38

Re: ifの条件をandで増やすと動かない? / stuncloud
しきさんとかぶってしまった…
こういうのはうっかりしてるとまったく予期せぬバグの原因になったりするので気をつけましょう!

No.2348 2016/04/22(Fri) 15:13:51

Re: ifの条件をandで増やすと動かない? / むーたん
うおお…
ビット演算なんてものがあったんですね!
今まで(たまたま)上手くいっていたこともあって、完全に盲点でした。
8ビットで1バイトくらいのことは知ってたけれどそれがこんな形で絡んでくるとは…
これを機に色々勉強してみます。
しきさん、stuncloudさん、ありがとうございました!

No.2350 2016/04/22(Fri) 15:56:15
ResizeとSplit / まるぱ
初歩的な質問です

str = "abc def ghi"
dat = SPLIT(str, " ")
print Resize(dat)

これで出てくる数値が2になるですが、

Resize(配列変数)は「配列の上限値」が得られるので、数値は3ではないのでしょうか?

それとも配列が何個あるのかを取得するのにはResizeを使うよりもよい方法があるのでしょうか?

アドバイスよろしくお願い致します

No.2329 2016/04/16(Sat) 11:40:05

Re: ResizeとSplit / しろまさ
Length(dat) で。
No.2331 2016/04/16(Sat) 13:39:17

Re: ResizeとSplit / まるぱ
しろまささん、ありがとうございます!
これまで配列数をResizeしていましたので、すべてLengthに変更します

No.2338 2016/04/17(Sun) 08:42:31
フレームサイトのデータ取得 / ある
いつもお世話になっています。
フレームサイトの情報取得で困っていて、どう書いたらいいのかわかりません。
いくつかのサイトを参考にしているのですが何故かエラーになります。
このリンク先が、というよりいくつかのフレームサイトで軒並みエラーになるので
こちらの書き方が悪いのだと思うのですが、どう直したらいいのでしょうか?
下記の名前が抜き取れたらあとはだいたいわかると思うので、名前の抜取り方を
教えて頂けると幸いです。

Public IE
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
setOleEvent()
IE.Navigate("http://park16.wakwak.com/~html-css/frame/frame_set.html")
BusyWait()

print IE.document.frames.length //3を返す
print IE.document.frames[0].document.name //エラーになる(例外が発生しました)

//procedure busywait()は長くなるため省略

No.2324 2016/04/16(Sat) 01:46:40

Re: フレームサイトのデータ取得 / しろまさ
とりあえず、
× IE.document.frames[0].document.name
○ IE.document.frames[0].name

それでも IE.document.frames[0] でエラーが出る場合、グループポリシーの設定で回避できる場合があります。
https://hebikuzure.wordpress.com/2014/07/23/iecomptlistsubdomain/

IEの互換表示設定で手動追加したものはIEの履歴削除で消滅します。
自動追加するにはレジストリの書込みのために管理者権限実行が必要ですが。

No.2326 2016/04/16(Sat) 09:53:38

Re: フレームサイトのデータ取得 / リキュール
フレームサイトの情報取得いうのは具体的に何ですか?
テキスト文字であれば以下で取れると思います。

print IE.document.frames.item[0].Document.body.innertext

No.2333 2016/04/16(Sat) 18:18:54

Re: フレームサイトのデータ取得 / ある
しろまささん
IE.document.frames[0].name
は同様のエラー(例外が発生)が出まして、グループポリシーの方はざっと目を通してみたけれど
本質がまだ理解出来ていません。互換出来ていないから取得が出来ないこともある、ということ
でしょうか?周辺情報も集めてみようと思います。

リキュールさん
まさしくこれがしたかったことで、テキストの取得を希望していました。
いくつかのサイトではframes[0].documentとなっていたけれどそれではエラーが出て、
frames.item[0]で取得出来るというのは不思議な感じです。こちらが理解出来ていないせいです。
いい機会なのでもう少しDOM関連について調べてみます。

お二人のご意見、とても参考になりました。
どうもありがとうございます(^^)

No.2337 2016/04/17(Sun) 04:30:03
SLCTBOXのタイムアウト秒 / Japanzer
いつも便利に使わせていただきありがとうございます。

さて、SLCTBOXのタイムアウト秒を1秒より短くする方法はないものでしょうか。
下のように試してみましたが、ダメでした。
SLCTBOX(SLCT_BTN,0.5,,"")
SLCTBOX(SLCT_BTN,1/2,,"")

SLCTBOXはダイアログが自動に現れて消えるのが簡単にできるので重宝してます。

No.2319 2016/04/15(Fri) 10:37:13

Re: SLCTBOXのタイムアウト秒 / 森
タイムアウト秒は1秒以下に指定できないようですね。
現実的には60秒程度以下にするのは、人間相手のインターフェイスでは無いと思えますが、どういった使い方なのですか?
用途によっては、別アプローチのアドバイスができるかも知れません。

No.2320 2016/04/15(Fri) 17:24:04

Re: SLCTBOXのタイムアウト秒 / Japanzer
ゲームのスクリーンキャプチャを撮るためです。

通常のPrint ScreenやUWSCのsaveimgだと、うまく欲しいところのキャプチャができないゲームです。
ですが、ある時、いったんゲームを非アクティブにしてから、再度アクティブに戻してキャプチャすると成功することに気づきました。
この用途で、selctboxは、タイムアウトを指定するだけでゲーム画面のアクティブが切り替えられるので重宝します。
1秒がとてつもなく遅いというわけではないのですが、速いことに越したことはないので、質問させていただきました。

No.2321 2016/04/15(Fri) 18:19:54

Re: SLCTBOXのタイムアウト秒 / 森
それでしたら、あらかじめメモ帳などを小さなウインドウで立ち上げておき、
CTRLWIN()を使って、一旦メモ帳をアクティブにした直後に、ゲームをアクティブにするというのは?
もしかしたら、ゲームをCTRLWIN()でHIDEの後にACTIVATEでもいけるかも。

No.2332 2016/04/16(Sat) 18:16:12

Re: SLCTBOXのタイムアウト秒 / Japanzer
森さん、ありがとうございます。

おっしゃるように、ペイントソフトでやってます。 
 ctrlwin(MSPaint, max)
 sleep(0.1)
 ctrlwin(MSPaint, min)
で動作させてます。

ただ、slcttboxだと一行ですし、速くて読めないかもしれませんがメッセージも表示できるのに比べて、なんか力ワザみたいなコードに思えましたのでお尋ねした次第です。

No.2336 2016/04/16(Sat) 23:39:58
kbd()とunicode / Japanzer
いつも便利に使わせていただいています。

さて、kbd()は、unicodeでも動作しますし、asc()はunicodeを返します。
下のスクリプトを走らせるとbが打たれると思うのですが、実際には「2」が打たれます。
理由がわかりません。ご教授いただけたら幸いです。

sleep(3) // このあいだにテキストエディタをアクティブにする
msgbox(asc("b"))
kbd(format(asc("b"), -1))

No.2328 2016/04/16(Sat) 10:53:09

Re: kbd()とunicode / Liners
KBD()は仮想キーコード指定だから。62(16進)は、テンキーの'2'。
No.2334 2016/04/16(Sat) 21:24:33

Re: kbd()とunicode / Japanzer
Linersさん、ありがとうございます。

UWSCのヘルプに
KBD( 仮想KEY, [状態, ms] )
引数
 仮想KEY: 仮想KEYコード、もしくはUNICODE

とあるので、数字を入れたら単純にunicodeとして動いてくれるのかと思ってました。
なんらかの変換が必要なのですね。

No.2335 2016/04/16(Sat) 23:30:48
sendstrで文字が送れない / まるぱ
UWSCにはいつもお世話になっており、ありがとうございます。

UWSC prodで2つのexeファイルを作りました。
どちらもフォーム画面が表示されるタイプのものです。
仮にAとBと言うことにしますと、

Aのフォーム画面で入力したテキスト内容を、Bのフォーム画面のテキスト入力欄に送るようにしています。

使っているコマンドは
sendstr(ID,Data,1,true,2)
です。Dataの部分がテキスト内容です。

UWSCがVer 5.1.1.0ではうまく動作していました。
ですが、最近のバージョンから動作しなくなりました。
再び5.1.1.0に戻したところ、うまく動作しています。

sendstrについて何か仕様変更をされたのでしょうか?
以前のように改善していただけると助かります。

No.2307 2016/04/09(Sat) 09:24:36

Re: sendstrで文字が送れない / umiumi
確認しました。
修正します。

No.2308 2016/04/10(Sun) 14:14:36

Re: sendstrで文字が送れない / まるぱ
ありがとうございます。
No.2330 2016/04/16(Sat) 11:40:32
usbメモリー / sen
お世話になっております。
usbメモリーに環境を保存して、パソコンが変わっても使えるようになりませんでしょうか?

No.2323 2016/04/16(Sat) 00:02:54
SLCTBOX関数について / 96.4kg
いつもお世話になっております。

SLCTBOX関数について質問があります。
下記にてボタンを作成すると縦方向に並びますが、横方向に並べる事は可能でしょうか?

SELECT SLCTBOX(SLCT_BTN, 0, 381, 76," - 選択 - ", "A", "B", "C")
CASE SLCT_1
Call A.uws
CASE SLCT_2
Call B.uws
CASE SLCT_3
Call C.uws
SELEND

以上、宜しくお願い致します。

No.2316 2016/04/14(Thu) 15:29:59

Re: SLCTBOX関数について / ある
slctboxのみだとちょっとわからないですが
createformで横に並べたらだいたい同じ使い方が出来ます。
(望んでた内容でなければごめんなさい)

No.2317 2016/04/15(Fri) 01:05:31

Re: SLCTBOX関数について / umiumi
横にはできません。
No.2318 2016/04/15(Fri) 01:55:35

Re: SLCTBOX関数について / 96.4kg
ご回答、ありがとうございます。
いろいろ試していたのですが、出来ないようなので諦めます。

No.2322 2016/04/15(Fri) 18:39:50
全1170件 [ ページ : << 1 ... 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 ... 117 >> ]