不管是autopager或是greasemonkey的autopagerize,遇到需要自訂或修改的網頁時處理方式都差不多:
1.指定網頁主體
2.找到"next link"
個人2種都使用過,後來還是選了gm的autopagerize配上:
XPath Checker剛開始完全不懂的話,可以上autopager看它的影片教學大致了解一下:
http://www.teesoft.info/content/view/97/82/lang,en/另外懂一點
Regular Expression和
XPath會有助於你新增自訂定義。
我舉個例好了,AutoPager的作法也是差不多,只是它有一些圖形介面工具和快速輸入讓你使用。看起來好像有點複雜,不過了解後其實很快就能弄出來:
http://vocaloid.orzhk.net/pixmicat.php? ... A%E3%83%B3代碼:
{
pageElement : '(//a[contains(text(),"回到版面")]/ancestor::div[1]/following-sibling::node()[following::table])',
insertBefore : '//table',
url : '^http://vocaloid\.orzhk\.net/pixmicat\.+?mode=category',
nextLink : '//table/tbody/tr/td[3]/form',
},
不過解法沒有絕對的,依個人習慣和頁面寫法會有不同解法。
像是這一頁看原始檔後大概了解一下它的結構是像這樣子 (只需要看body)
- div id="header":投稿區
- div (無class也無id):回到版面,重新讀取的連結
- div class="threadpost":一筆資料
- hr:分隔水平線
...重覆至頁尾
- table (無class無ID):頁碼
AutoPagerize在運作時至少需要3項變數
- url:你想要使它作用的網址
通常不用全打, 只要讓它能偵測到就可以了。
像這個例子我輸入了:
^http://vocaloid\.orzhk\.net/pixmicat\.+?mode=category - pageElement:頁面的主體,也就是重覆的部份
對這個例子來說就是先前打過的
- div class="threadpost":一筆資料
- hr:分隔水平線
loop....
這2個部份,因為試過了只有指定<div class="threadpost">這元素的話,第二頁起排版會變的非常亂,所以必須把<HR>也指定進來,但是又沒有更大的區塊包住它們2個,所以只好用比較複雜一點點的寫法了。如下:
//a[contains(text(),"回到版面")]/ancestor::div[1]/following-sibling::node()[following::table])
意思是從2<......<5,也就是第2區的div以後一直到第5區的table之間的所有元素。
因為2沒有class也沒有id也沒有style,就必須用其他方式去指定它:
//a[contains(text(),"回到版面")]/ancestor::div[1]
的意思是包含內容文字有回到版面這個連結的第1個div
/following-sibling::node()[following::table])
的意思是從上個元素之後到遇到table之前的所有元素,這麼一來就完成了。
大多數網頁的主體都會有一個帶ID的區塊元件去包住,所以只要指定那個ID的區塊就完成了。
這邊是提一個稍微特殊一點點的情況作為參考。 - nextLink: 「下一頁」在哪。
//table/tbody/tr/td[3]/form
這就直接指定就可以了,意思是在table的tbody的tr的第3個td下的那個form。
下一頁就是那顆鈕(也就是form) - insertBefore:下一頁的內容要插在哪個元素之前。
如果你不想要每捲一頁就看到一次上一頁123456789下一頁的話,只要指定這個變數就可以了。通常是指定pageElement後第一個遇到的元素。
這邊是AutoPagerize的Site Info資料庫
http://wedata.net/databases/AutoPagerize/items個人沒什麼程設基礎,原本也不知道什麼叫XPATH和RegExp,不過這其實不需要程設能力,只需要一點邏輯觀念就可以學會XPATH和RegExp和皮毛,要寫出來就不難了,不用擔心。