HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1228
名無しwebページ内のすべてのURLを取得したい。5解決


名無し

リンク

2013/12/28(Sat) 11:11:24|NO.58925

こちらのページ内にあるURLをすべて取得したいのですが、
JavaScriptを使用しているせいで、ソースコードを取得してもURLがありません。
どのようにしたら取得できるのでしょうか?
http://soukoff.web.fc2.com/Test.html



この記事に返信する


774

リンク

2013/12/30(Mon) 00:18:18|NO.58977

該当ページが見つからない為詳しい状況は解らないのですが
・JavaScriptによるコンテンツ生成
 ページ完全表示後にブラウザ等からソースを抽出する事で取得できそうです。
 (ソースファイルでは無く、読み込まれているソースです)
 http://hsp.tv/play/pforum.php?mode=all&num=58880
 こちらのスクリプトのような感じで一応取得できそうです。

・JavaScriptによるページ移動
 JavaScript自体を解析して移動先を特定するか
 実際に移動してからURLを取得する…くらいでしょうか

またページ内にフレームやインラインフレームが存在する場合
その内部のソースは別個に存在します、ご注意を。



名無し

リンク

2013/12/30(Mon) 10:37:37|NO.58982

>774さん

すみません、URLを訂正します。
http://soukoff.web.fc2.com/AD.html
正しくはこちらです。

そちらのスクリプトは、forestさんのスクリプトの

>o = o("links",2)
>url = o("HREF")
この部分を、

;一部やむをえず全角文字使用
url="" :num=o("links") :num=int(num("length"))
Repeat num
link=o("links",cnt) :href=GetPath(link("href"),16)
;hrefに「%2Fkuji.rakuten.」を含むもので探索
If(InStr(href,,"%2fkuji.rakuten.")>0){url=link("href") :Break}
Loop
If(url==""){/*見つからない*/ :Return}

これに書き換えて実行したらいいのでしょうか?それだと「サブルーチン外のルーチンは無効です」とエラーが出てしまいます。



774

リンク

2013/12/31(Tue) 20:47:23|NO.59038

あちらのスクリプトはそもそもの目的が異なる為、そのまま実行したとしてもご希望の結果は得られないと思います。
(参考・流用できそうな部分が多そうだったので参照先として提示しました)

エラーに関してはgosub・returnの不一致によるものの様ですので
button命令にgosub指定が抜けていないか等、適宜修正して下さい。

で該当ページなのですが、やはりと言いますか多重のiframeに囲われています。

#deffunc extractLinks array p0, array p1, int p2, local a, local b, local c, local d, local e If(p2){LogMes StrF("<%s>SRC:%s",p0("tagName"),p0("src"))};;;; If(p2){c=p0("contentWindow") :c=c("document")}else{c=p0("document") :sDim p1,$10000} d=c("links") :a=0,Int(d("length")),0 :sDim b,$400 If(a.1){*@ :e=d(""+a) :b=""+e("href")+"\n" :If(InStr(p1,,b)<0){p1+=b :a.2++} :DelCom e :a++ :If(a<a.1){Goto *@b}} DelCom d :ComRes d :c->"getElementsByTagName" "frame" :a=0,Int(d("length")) If(a.1){*@ :e=d(""+a) :extractLinks e,p1,1 :a.2+=stat :DelCom e :a++ :If(a<a.1){Goto *@b}} DelCom d :ComRes d :c->"getElementsByTagName" "iframe" :a=0,Int(d("length")) If(a.1){*@ :e=d(""+a) :extractLinks e,p1,1 :a.2+=stat :DelCom e :a++ :If(a<a.1){Goto *@b}} DelCom d :DelCom c :If(p2==0){LogMes StrF("[links:%d]",a.2)};;;;; Return a.2 ;hrefはやむを得ず全角 ;〜〜〜〜 sDim links :extractLinks objIE,links,0
のような感じで取得できるかと甘く考えていたのですが、クロスドメイン規制か何かで正攻法での内部リンク取得は厳しそうです。



リンク

2014/1/1(Wed) 09:53:35|NO.59064

>774さん

なるほど・・・今回は諦めます。
何度も回答していただき、ありがとうございます。



774

リンク

2014/1/1(Wed) 19:33:57|NO.59070

「できませんでした」だけでは何ですので新年の一発ネタとして

#module #const chkTab 20 ;TABキー試行回数 #uselib "user32.dll" #func _SetForegroundWindow "SetForegroundWindow" sptr #func _SendInput "SendInput" int,var,int #cfunc _MapVirtualKey "MapVirtualKeyA" int,int #deffunc sendTabKey int p0, local a Dim a,14 :a.0=1,(_MapVirtualKey(9,0)<<16)|9,8 :a.7=1,(_MapVirtualKey(16,0)<<16)|16,8 If(p0){_SendInput 1,a.7,28} :_SendInput 1,a.0,28 :Wait 1 a.2|=2 :a.9|=2 :_SendInput 1,a.0,28 :If(p0){_SendInput 1,a.7,28} Return #deffunc bruteCheckLinks array p0, array p1, local a, local b, local c sDim p1,$10000 :b=p0("document") :c=b("links") :DelCom b :b=c("0") DelCom c :sDim c,$400 :a.0=chkTab,0,1 _SetForegroundWindow p0("hwnd") :b->"focus" *@ :Wait 1 :c=""+p0("statustext")+"\n" :If(InStr(c,,"://")<0){c=""} If((c!="")&&(InStr(p1,,c)<0)){p1+=c :a.0=chkTab :a.1++} sendTabKey a.2 :a.0-- :If(a.0){Goto *@b} If(a.2){a.0=chkTab :a.2-- :b->"focus" :Goto *@b} DelCom b :LogMes StrF("[links:%d]",a.1);;;; Return a.1 #global ;〜〜〜〜 sDim links :bruteCheckLinks objIE,links
TABキー連打しつつステータスバーのURL表示を拾い集めます。



ONION software Copyright 1997-2023(c) All rights reserved.