UWSC 掲 示 板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオンにしてください
動作不具合での質問の場合には環境(OS,IEのバージョン等)の表記もしてください
タイトルは質問内容を表したものにしてください
ネットゲーム関係の質問はご遠慮ください

タイトル (必須)
 お名前 (必須)
文字色
設定保存削除/編集パス  

スクレイピングが出来ない部分は…? / ある
情報の抽出がうまくいかないのですが、どうしたらちゃんと取れるでしょうか?

下記スクリプトを実行して、クリップボードのデータをテキストに張り付けた状態で
「中国风红木企业私人定制刻字LOGO」を検索してもヒットしませんでした。
getelementsbytagnameで要素ごとに調べてみてもダメでした。
そもそも構造的に取得不可能なものなんでしょうか?

もし何かやり方があるのでしたらヒントだけでも頂けたらと思います。

//--------------------------------------
Public IE
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
setOleEvent()
IE.Navigate("https://s.taobao.com/search?imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20180116&ie=utf8&tfsid=TB1WUesnnnI8KJjy0FfXXcdoVXa&app=imgsearch")
BusyWait()

body=IEgetsrc(IE,"body")
sendstr(0,body)

No.4996 2018/01/17(Wed) 00:40:33

Re: スクレイピングが出来ない部分は…? / ある
Busywait()はRecIEで生成されたものを使用しています。
(長いため省略しています)

No.4997 2018/01/17(Wed) 00:41:54

Re: スクレイピングが出来ない部分は…? / トンボ
IEウィンドウのDOM Explorerのテキストと照合した結果、下記1行のテキストを見つけました。
<div class="loading">加载中...</div>

予想ですが、IE内容の更新が完了する前にテキスト取得したのがNGではないでしょうか。
(つまり取得タイミングが問題。)

ただ、私はIEのCOMオブジェクトに詳しくはないため、これ以上のアドバイスはできず…。

No.5007 2018/01/17(Wed) 22:11:29

Re: スクレイピングが出来ない部分は…? NEW / stuncloud
HTML自体のレンダリングが終わってもその後jsで動的にdocumentが書き換わるパターンだとBusyWait()だけでは対応できません
なので、描画が完全に終わりつつある・終わった場合に存在するエレメントを予め調べておき、それが出てくるまで待つというような方法を取ります
対象エレメントのidがわかってる場合ならば、例えば

function WaitElementById(IE, id, timeout = 10)
 t = gettime() + timeout
 repeat
  e = IE.document.getElementById(id)
  if e = NOTHING then
   sleep(0.1)
  else
   result = e
   exit
  endif
 until gettime() >= t
 result = NOTHING
fend

こんな感じのものをBusywait()の後に呼びます
対象エレメントが出現した時点でそのオブジェクトを返すようになっています
見つからない場合はNOTHINGが返るのでその場合はループするという仕組みですね
あと念のためタイムアウト秒を指定できるようにしています

No.5022 2018/01/19(Fri) 14:47:16
複数のTHREADの処理が終わってから次を実行したい NEW / moco
処理Aが全て終わってから処理Bを実行したいです
方法ありますでしょうか


//処理A
FOR A = 5 TO 0 STEP -1
THREAD tes
SLEEP(1)
NEXT

//処理B
FOR B = 5 TO 0 STEP -1
FUKIDASI("あと" + B + "秒",100,100,0,40)
SLEEP(1)
NEXT

Procedure tes
FOR A = 5 TO 0 STEP -1
FUKIDASI("あと" + A + "秒",G_MOUSE_X,G_MOUSE_Y+A*100,0,40)
SLEEP(1)
NEXT
Fend

No.5021 2018/01/19(Fri) 14:38:17
iniファイルのセクション名をslctcoxの項目で選択する方法 / 荒鷲
iniファイルのセクション名をslctcoxの項目で選択する方法ないでしょうか?
下記の項目1、項目2、項目3を配列にいれたような状態でslctboxの項目で使用できるようにしたいと思っています。

[元]

[項目1]
1=テスト1

[項目2]
1=テスト1a

[項目3]
1=テスト1b

No.5008 2018/01/18(Thu) 11:09:27

Re: iniファイルのセクション名をslctcoxの項目で選択する方法 NEW / トンボ
説明不足で意図が汲み取りにくいですが、下記のイメージでしょうか。
@iniファイルのセクション名を全部取得する
 READINI関数では実現不可なので、FOPEN/FGET/FCLOSE関数で取得する
A全てのセクション名を配列に格納する
BSLCTBOXの関数の引数"項目"に、配列の値を渡す
 なお、引数"項目"に渡す値が空文字だと、下記では4〜5個目のボタンは非表示になります。
 (例)SLCTBOX(SLCT_BTN, 0, "メッセージ", 配列[0], 配列[1], 配列[2], "", "")

No.5015 2018/01/19(Fri) 01:50:06

Re: iniファイルのセクション名をslctcoxの項目で選択する方法 NEW / トンボ
追伸。下記のスクリプトでも実現できます。(こちらの方が一般的な使い方でした。)
DIM 配列[2]
配列[0] = "[項目1]"
配列[1] = "[項目2]"
配列[2] = "[項目3]"
SLCTBOX(SLCT_BTN, 0, "メッセージ", 配列)

No.5017 2018/01/19(Fri) 07:57:59

Re: iniファイルのセクション名をslctcoxの項目で選択する方法 NEW / しろまさ
// とりあえず正規表現

lst = rReplace(DosCmd("type C:\Setting.ini" + "<#CR>"), "\[(.*)\].*(\r\n)|.*\r\n", "$1$2")
SlctBox(SLCT_BTN or SLCT_NUM, 0, "選択", Split(lst, "<#CR>"))

Function rReplace(a_text, a_ptn, a_after); Dim reg = CreateOLEObj("VBScript.Regexp"); reg.Global = TRUE; reg.Multiline = TRUE; reg.pattern = a_ptn; Result = reg.Replace(a_text, a_after); FEnd

No.5018 2018/01/19(Fri) 08:28:01

Re: iniファイルのセクション名をslctcoxの項目で選択する方法 NEW / 荒鷲
トンボ様、返信ありがとうございます。
セクション名をslctboxで選択したい処理ですので、下記の一般的な使い方は知っていました。

SLCTBOX(SLCT_BTN, 0, "メッセージ", 配列)

No.5019 2018/01/19(Fri) 11:17:52

Re: iniファイルのセクション名をslctcoxの項目で選択する方法 NEW / 荒鷲
しろまさ様、回答ありがとうございます。期待通りの処理ができました。
正規表現使いこなせると色々できて便利ですね。

No.5020 2018/01/19(Fri) 11:19:05
最前面にポップの指定テキストエリアに指定文字列を入力させる方法 NEW / 遊助
ワードプレス内で「サムネイル画像を設定」のリンクをクリックすると最前面にポップのようなモノが表示されます。
タイトルと代替テキストのテキストエリアに指定の文字列を入力させる方法ないでしょうか?

下記がその画像です。
https://gyazo.com/171a2349c5d8a3885e15d2f1ffa08849

No.5013 2018/01/18(Thu) 17:14:48

Re: 最前面にポップの指定テキストエリアに指定文字列を入力させる方法 NEW / トンボ
UWSCの高レベル記録やショートカットキー入力(KBD関数やSCKEY関数)でもNGでしょうか。
もしNGでしたら、下記案もあります。
@「代替テキスト [ ]」の部分をイメージファイル(**.bmp)として作成し、CHKIMG関数を利用して座標取得する(G_IMG_X、G_IMG_Y)。
ABTN関数で指定の座標にマウスクリックする。
BSENDSTR関数やKBD関数などで指定文字列を入力する。

No.5016 2018/01/19(Fri) 07:35:14
ワードプレス内に画像をドラッグ&ドロップする方法 NEW / 遊助
指定フォルダーにある1つの画像をワードプレスの個別記事の画像設定にドラッグ&ドロップする為に下記を試しても一瞬ドラッグ&ドロップするのですがアップロードせずに反応しない状態です。何か良い方法ないでしょうか?

指定フォルダー="C:\Users\gazou"
getdir(指定フォルダー)
id99=GETID("投稿の編集 WordPress - Internet Explorer","IEFrame")
dropfile(id99 , 指定フォルダー , GETDIR_FILES[0])

No.5012 2018/01/18(Thu) 16:51:37

Re: ワードプレス内に画像をドラッグ&ドロップする方法 NEW / トンボ
サンプルになりますが、ウィンドウは手動ではなくUWSCから表示すれば、とりあえず動く模様です。
(EXEC()を削除してペイントツールを手動で開いて試すと、同ツールからエラーが表示され、NGでした…。)

EXEC("mspaint") // EXEC()でペイントツール表示
DROPFILE(GETID("ペイント"), "C:\Temp", "abc.bmp")

EXEC()の使用だと都合が悪い場合は、No.4280の記事にあるスクリプトを参考に試してください。
本掲示板の最下にある記事検索にて「dropfile」を入力して[Search]すれば、すぐに見つかります。

No.5014 2018/01/18(Thu) 21:27:09
条件式にクリップボードの文章の文字列が変わったらの式 / ユウナ
if条件式にクリップボードの文章の文字列が変わったらのコードってどう書けばいいでしょうか?
No.4982 2018/01/14(Sun) 22:03:51

Re: 条件式にクリップボードの文章の文字列が変わったらの式 / satocha
getstr(0)で現在クリップボードにある文字列を取得し、以前に取得していた文字列と比較すればいいです。
CurrentClipStr=getstr(0)
if CurrentClipStr <> OldClipStr
 //クリップボードの文章の文字列が変わったときの処理
endif

No.4983 2018/01/15(Mon) 07:42:50

Re: 条件式にクリップボードの文章の文字列が変わったらの式 / ユウナ
satocha様、期待どおりの処理ができました。ありがとうございます。
No.5011 2018/01/18(Thu) 11:12:30
下のキーを繰り返しで順次増やして押していく方法 / ハルヒ
for文で例えば3回、回していくとして、1回目は下キーを一回、2回目は下キーを2回入力と順次増やしていく方法ないでしょうか?
No.4980 2018/01/14(Sun) 19:41:15

Re: 下のキーを繰り返しで順次増やして押していく方法 / satocha
For文を入れ子にすれば可能です。
No.4985 2018/01/15(Mon) 07:49:19

Re: 下のキーを繰り返しで順次増やして押していく方法 / トンボ
簡潔に言うとFor文の中にFor文って感じですね。
FOR i = 1 TO 3
FOR j = 1 TO i
PRINT i + "巡目:" + j + "回目のキー押下"
KBD(VK_DOWN, CLICK, 1000)
NEXT
NEXT

No.4995 2018/01/16(Tue) 23:45:20

Re: 下のキーを繰り返しで順次増やして押していく方法 / ハルヒ
トンボ 様、回答ありがとうございます。
for文の入れ子でできるとは考えつかなかったです。
たすかりました。

No.5010 2018/01/18(Thu) 11:11:35
Thunderbirdでメールを送信時に指定差出人と送信ボタンを押す方法 / 遊助
Thunderbirdでメールを送信する時に差出人のメールアドレスの1つ目をクリックして送信を押して、次に差出人のメールアドレスの2つ目を選択して送信する方法が分かりません。何かよい方法ないでしょうか?

下記が画像です。
https://gyazo.com/424c4dedbe999b8ec35279bdb78a31ff

No.4973 2018/01/13(Sat) 01:00:32

Re: Thunderbirdでメールを送信時に指定差出人と送信ボタンを押す方法 / トンボ
Thunderbirdの使い方がよくわかりませんが、キー入力で色々試すと良いです。

アドレスの選択方法ですが、クリック処理だとThunderbirdが無くて試せない上、
ちょっと面倒な処理になる気がしますので、文字列の直接入力方法にしました。

スクリプトを記述しますが、どこか間違っていたらごめんなさい。

// ウィンドウのID取得とアクティブ化
WinId = GETID("作成: (件名なし)")
ACW(WinId)

// [ALT]+[R]キー押下で[差出人]欄に移動
KBD(VK_ALT, DOWN, 1000)
KBD(VK_R, CLICK, 1000)
KBD(VK_ALT, UP, 1000)

// [TAB]キー2回押下で[宛先]の入力欄に移動 ←押下は1回だけでいいかも?
KBD(VK_TAB,CLICK, 1000)
KBD(VK_TAB,CLICK, 1000)

// 1つ目のアドレスを入力して[Enter]キー押下でアドレス決定 ←多分次の行へ移動する?
SENDSTR(WinId, "yrimys1u@")
KBD(VK_RETURN, CLICK, 1000)

// ←ここにも[TAB]キー押下処理が必要?

// 2つ目のアドレスを入力して[Enter]キー押下でアドレス決定 ←多分次の行へ移動する?
SENDSTR(WinId, "acaio59c@")
KBD(VK_RETURN, CLICK, 1000)

No.4998 2018/01/17(Wed) 00:44:15

Re: Thunderbirdでメールを送信時に指定差出人と送信ボタンを押す方法 / トンボ
追伸。
送信ボタン押下処理はショートカットキーがわからないため、KBD関数、SCKEY関数、CLIKITEM関数のどれかで試してください。

なお、Outlookを元に予想でスクリプト作成しましたが、動くと良いですね。

No.5000 2018/01/17(Wed) 07:50:24

Re: Thunderbirdでメールを送信時に指定差出人と送信ボタンを押す方法 / 遊助
トンボ様返信ありがとうございます。
希望どおりの処理ができました。

No.5009 2018/01/18(Thu) 11:10:29
特定のFOLDERが閉じるまで待つ方法は(せき) / せきこうじ
●画像解析ソフトの自動化を進めています。
解析ソフトの親ウインドがあり、ある動作開始後はその上に小さな子ウインドが現れ、35分くらいすると子ウインドが閉じます(時間は一定しない)。閉じたことを確認後に次の動作をしたいのです。
=====
知恵袋の回答をみると
id=GETID("ウインドタイトル名")
WHILE(STATUS(id,ST_TITLE)<>"")
SLEEP(0.01)
WEND
=====
で実現するとの答えを見つけました。
上記記載で<>の意味がよくわかりません。
”ウインドタイトルが取得できなくなるまでまつ”
ということでしょうか。

またほかのよい方法はありますでしょうか。

No.5001 2018/01/17(Wed) 10:53:45

Re: 特定のFOLDERが閉じるまで待つ方法は(せき) / satocha
>上記記載で<>の意味がよくわかりません

「A <> B」で「AとBが等しくない」という意味です。
知恵袋の回答者がどういう意図でコーディングしたか知りませんが、

>WHILE(STATUS(id,ST_TITLE)<>"")

は「ウインドウのタイトル文字列が空文字列でない間は」という意味です。ウインドウが閉じられれば、タイトル文字列も取得できなくなりますから、ほぼ「ウインドウの開いている間は」と同じ意味になります。

「ほぼ」と断り書きを入れたのは、世の中のウインドウすべてが必ずしもタイトル文字列を持っているわけではないからで、そういうウインドウの挙動をこのプログラムで知ることはできません。

UWSCのstatus関数には、ウインドウの存否を知る機能もあります。ヘルプで確認してほしいのですが、

status(id,st_isid)

がそれです。せっかく機能が用意されているのですから、こちらを使ったほうがいいと思います。

No.5004 2018/01/17(Wed) 15:57:04

Re: 特定のFOLDERが閉じるまで待つ方法は(せき) / トンボ
<>は比較演算子の1つですね。
「比較演算子」でググれば参考情報が色々出ますので、他の演算子も学べます。

OPTION SAMESTR // 「文字比較、置換、サーチにて大文字、小文字を区別」を有りにする
PRINT "a" <> "b" // (不一致なので)True
PRINT "A" <> "a" // (不一致なので)True
PRINT "a" <> "a" // (不一致ではないので)False

>またほかのよい方法はありますでしょうか。
REPREAT文でもいけます。加えてウィンドウが開いたか確認する処理も作成しました。

// ウィンドウが開くまでループ
REPEAT
id = GETID("タイトル")
SLEEP(1)
UNTIL id <> -1
PRINT "ウィンドウが開いた"

// ウィンドウが閉じるまでループ
REPEAT
SLEEP(1)
UNTIL STATUS(id, ST_ISID) = False // ←※
PRINT "ウィンドウが閉じた"

※@目的は、タイトル内容ではなくウィンドウ開閉状況の確認なので、ST_ISIDが良いですね。
 AGETID関数を使わないのは、ウィンドウが多数表示されている場合に処理時間が長くなるため。
  STATUS関数はウィンドウへの確認が1つだけになるため、処理時間が短いです。

No.5006 2018/01/17(Wed) 21:15:02
WINDの終了問題は解決しました。 / せきこうじ
●いろいろありがとうございました。半日調べて自分で解決に至りました。
診療の合間にこっそり検索行っておりましたが、これでほぼ終了いたしました。

//BAADというウインドの状態を調べ、ACTIVEになったらACTIVEとプリントする。

WINID=GETID("BAAD ver.4.2.1.0")

REPEAT
SLEEP(5)
PRINT "STATUS(ST_ACTIVE)=["+STATUS(WINID,ST_ACTIVE)+"]"
SLEEP(5)
UNTIL STATUS(WINID,ST_ACTIVE)


PRINT "BAAD=ACTIVE"
SLEEP(5)

●実際はPRINTではなく次の動作です。

No.5005 2018/01/17(Wed) 16:08:44


 過去ログ(〜2017/08/24)・検索ツール


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