2010-12-14 13 views
6

Bu, Applescript desteğine sahip olan Safari'de bunu yapmak için çocuk oyuncağıdır. Google Chrome’un AS desteği yeni geldi. Bu yüzden onlara şüphe parası veriyorum. Temel olarak HTML'yi panoya çekmeye çalışıyorum, böylece bilgi alabiliyorum.Google Chrome'da Geçerli Sekmenin Kaynağı Alın

tell application "Google Chrome" 
view source of active tab of window 1 
save active tab of window 1 
print active tab of window 1 
reload active tab of window 1 
go back active tab of window 1 
go forward active tab of window 1 
copy selection of active tab of window 1 
paste selection active tab of window 1 
end tell 

ancak "set X to source of active tab of window 1" diyemeyiz yazık ki: Bu gibi bazı şık komutları var. Benim için herhangi bir önerisi var mı? Benim şu anki fikirlerim, arka planda ihtiyacım olan kodu Safari'de (oldukça çirkin) yüklemek ya da kaynağı görüntülemeye ve UI komut dosyasıyla yakalamaya çalışmaktır, ancak bu da çirkin. Ayrıca çalışmasını engelleyen komut dosyaları ile karşılaşıyorum.

Herhangi bir yardım için teşekkür ederiz.

+0

Bekle dönecektir, Chrome artık AppleScript desteği vardır? Bu ne zaman oldu? Korku veren! –

cevap

-1

Chrome'un AS desteğinin "yeni geldi" şeklini gördükçe, kullanımı "heyecan verici" olmak zorunda. Sözlüğünde kullanabilecekleri bazı komutları denerken, hala çalışacak bazı kıvılcımlar varmış gibi görünüyor. Google, kaynak kodun daha kolay bir şekilde alınabilmesi için API'da bir yol gösterene kadar (ve/veya ilgili kodları çözer), yayınınızda bahsettiğiniz alternatiflerden birini kullanmanız gerekir.

+0

(Söz konusu sekme tekrar çevrilinceye kadar tekrar ve tekrar komut veren bir komut dosyası var ama yavaş ve gerçekten de yetkin değil.) –

2

Artık Chrome'un AppleScript desteğinin olduğunu öğrenmek beni çok heyecanlandırdı. Henüz bu kadar az olduğu talihsiz ama eminim ki (umarım) daha iyi olur. kaynakla doğrudan almak için bir yolu yoktur, ben şu hackish rotayı seçerdim:

tell application "Google Chrome" 
    view source of active tab of window 1 -- Or whichever tab you want 
    delay 3 
    repeat while loading of active tab of window 1 
     delay 3 
    end repeat 
    select all of active tab of window 1 -- Must *always* be the active tab 
    copy selection of active tab of window 1 
    delete tab (active tab index of window 1) of window 1 
end tell 
delay 1 
return the clipboard 

Evet, hackish, ama bu komut dosyası sözlük mevcut durumu göz önüne alındığında, kaçınılmaz. Komut dosyası açık olmalıdır: bir kaynak sekmesi açın, yüklenmesini bekleyin, içeriği seçin, kopyalayın ve sekmeyi kapatın. En iyi olanı görmek için delay 3 s ile oynayabilirsiniz. ilkactive tab of window 1'un keyfi olduğunu ve geri kalanının kaynak sekmesine açıkça başvurduğunu unutmayın. Ayrıca, görünüşe göre, bir sekmeyi Chrome'un komut dosyası sözlüğünden (oy vey) kapatmanın bir yolu yoktur, bu yüzden onun yerine JavaScript kullanmalıydım. Ayrıca, son delay 1, gerekli olmamalıdır, ancak eğer orada olmasaydı, bunları yapıştırdığım zaman pano içeriğinin doğru olmasına rağmen, benim sınamalar bazen yanlış şeyi döndürürdü. Panoyu güncellemek için göze çarpan bir zaman alan yeterli metin.

Düzenleme 1: bana önerildi olarak Ben delete tab hattı ile execute the active tab of window 1 javascript "window.close()" yerini aldı. Ne yazık ki, delete tab active tab of window 1 çalışmıyor, bu biraz daha kıvrımlı yapıya ihtiyacınız var.

+2

'delete tab 3 'kullanabilirsiniz. Sorun, çok işlemli mimaridir, HTML, tarayıcı işleminde AppleScript kodu çalıştırılan işleyicide yer almaktadır. – shreyasva

+0

@ user265260: Ooh, güzel. Teşekkürler! Bunu cevabımın içine düzenlerim. Ayrıca, sadece meraktan dolayı, neden Chrome'un bu sorununa neden olan bir özelliği var? (Cevabı biliyorsanız.) –

+1

'pencerenin 1 sekmesini (pencerenin 1 etkin sekmesi dizinini) silmek için yapmalısınız. Aktif sekme, bir tür sekme nesnesini döndürür, hangi pencerenin ait olduğunu bilmenin bir yolu olmadığı için sekmede sekme desteklenmez (sekmeler pencerelerini değiştirebilmenin doğru yolu budur). – shreyasva

2
-- This script copies the HTML of a tab to a TextEdit document. 
tell application "Chromium" 
tell tab 1 of window 1 to view source 
repeat while (loading of tab 2 of window 1) 
end repeat 
tell tab 2 of window 1 to select all 
tell tab 2 of window 1 to copy selection 
end tell 

tell application "TextEdit" 
set text of document 1 to the clipboard 
end tell 

Açıklama: Komut, sekmenin yüklenmesini bekleyen sıkı bir döngüye yerleştirilir. Ardından, HTML'yi panoya kopyalar.

tell application "Google Chrome" 
    set t to active tab index of window 1 
    tell active tab of window 1 to view source 
    set t to t + 1 
    repeat while (loading of tab t of window 1) 
    end repeat 
    tell tab t of window 1 to select all 
    tell tab t of window 1 to copy selection 
    delete tab t of window 1 
end tell 

Edit1: Yukarıdaki komut google chrome Javascript

--Applescript code 
tell active tab of window 1 
    set sourcehtml to execute javascript 
    document.getElementsByTagName('html')[0].innerHTML 
end tell 
+0

Teşekkürler, bu yararlı. Hala bazı ağır UI komut dosyaları yapıyor, ancak küçük hatalar olduğundan (henüz Google Chrome'da çalışmayan şeyler) zor. Bir sorun yaşıyorum, bir sekme açmam, ana sayfadan bazı verileri almam (bu bir bit.ly URL), sonra orijinal sekmeyi gösteren sekmeyi kapatmam gerek. UI komut dosyasıyla ilgili bir nedenden ötürü, garip bir yere, sanırım sekmelerin sonlarına dönmek istiyor. Pencerenin 1 penceresinin 154 aktif hale gelmesini nasıl söyleyebilirim? –

+0

'uygulamasına" Google Chrome "u bildirin \t pencerenin etkin sekmesini ayarlayın 1// * ne istersen */ söyle ' – shreyasva

5

istediğini exaclt yapmalıdır.

Bu source için sayfanın tam kaynağını atamak ve ona

tell application "Google Chrome" 
    set source to execute front window's active tab javascript "document.documentElement.outerHTML" 
end tell 
+0

Bu bana verir ** Sözdizimi Hatası ** * Beklenen satır sonu ancak özellik bulundu. * –

+0

[Bu cevap] (http://stackoverflow.com/a/32239972/130427) çalışır. –

2

Chrome'un AppleScript kütüphane can execute JavaScript destekler beri