模擬真實的瀏覽器的問題


#1

大家好,我現在遇到一個問題
我可以用 nokogiri 和 mechanize 找到一個網頁的某個 tag 的 attribute , 或是填入搜尋的表單然後再得到結果之類的功能。

但我現在有一個問題:

我現在知道某個連結,可以把某網路書店的一個商品加入購物車,如果我直接在瀏覽器輸入那個連結的話,是確實可以加入購物車的。

但是我用 mechanize 寫

agent.click(‘add_to_cart_link’)

這樣是無效的。 沒有錯誤也沒有任何結果。
請問是我用的方法錯了,還是真的不行這樣做?
如果不行這樣做的話,請問要怎麼做到這個功能呢?

我想到的問題可能是要真的摸擬一個瀏覽器,輸入網址後就可以達到我想要的功能,請問我該怎麼解決呢?

謝謝大家

補充: 那個網址是包在這一大串裡面的, href 的值


#2

對我而言,nokogiri 和 mechanize 都不是很好的解法,尤其對到 AJAX 系列之類的,自己 hack 又要一直 trace code 曠日費時,我之前有寫一篇文章,不過那個偏難所以沒在這邊發表,但對我而言是最終解法,給你參考就是

用這個你就可以完美的模擬所有瀏覽器的動作,包括等待 AJAX dom 生成(這邊主要 demo 這點),cookie 維持並丟到下一頁,和 dom 的操作之類的,單純你的兩邊的 JS (控制瀏覽器 & 對象網頁內執行)要寫得好一點就是了

http://apidock.com/ruby/v1_9_3_392/Open3/capture3/class

有這基礎後你就可以用類似 open3 來去呼叫 phantomjs,然後 phantomjs 用 stdout(控制端的 console.log)來回傳給 ruby 即可

如果要類似 streaming 的做法(一邊不結束持續運作,另外一邊要持續得到結果)則改用 open3 的 popen 系列哩