Curl kullanarak web isteklerini otomatikleştirme?


13

İş yerinde kullanmam gereken bazı "kurumsal" sistemlerim var. Bazıları korkunç, çerçeveler, pop-up'lar ve benzeri.

Curl veya bunun gibi bir şey kullanarak bazı şeyleri otomatikleştirmeyi düşünüyordum. Giriş yapmam gerekiyor, köprülere tıklıyorum, bazı veriler ayarlıyorum ve bazı yayınlar yapıyorum.

Curl kullanmak mümkün mü? Yoksa Selenyum gibi bir şey mi kullanacağım?


1
Bunun için Python'un zope.testbrowser yazılımını kullanırdım.
phunehehe

2
Javascript kullanabilmeniz gerekiyor mu?
intuited


2
Bir oturum kullanmak, her istekle birlikte oturum kimliğini göndermektir. Bir çerezde veya GET parametresinde. wgetve curlNetscape çerez dosyasını kullanabilir, bu nedenle tarayıcınız da böyle bir dosya kullanıyorsa, dosyayı indiriciye belirtmek için yeterli olabilir. Peki, ne tür bir tarayıcı kullanıyorsunuz?
manatwork

2
Bunlarla basit bir çözüm için şans yok. Firefox ve Chrome SQLite kullanıyor, Opera'nın ikili veri dosyası formatı var. Oturum kimliğini aramanız ve indiriciye manuel olarak iletmeniz gerekecek gibi görünüyor.
manatwork

Yanıtlar:


13

Evet, kıvrılma ile tamamen mümkündür. En önemlisi curl ile kullanımları arasında çerezleri kaydetmek ve yeniden yüklemek olacaktır --cookie-jar. Ayrıca form verilerini gerektiği gibi gönderebilirsiniz. Bir web sitesinde dolaştığımda neler olduğunu yakalamak için genellikle Canlı HTTP Üstbilgileri adlı bir Firefox eklentisi kullanırım. Herhangi bir üstbilgiyi değil, aynı zamanda kıvrılma ile ne yapacağını anlamaya çalışırken çok yararlı olan herhangi bir form gönderisini de kaydeder. Çeşitli kıvırma çağrılarını otomatikleştiren bash komut dosyaları yazdım mktempve web sayfasında sınırlı işlem yapmak için borular ve geçici dosyalar (nezaket ) kullanıyorum, ancak web sayfası işlemenin çok fazla yapılması gerekiyorsa, genellikle LibWWW ile Perl'e geçiyorum.


Firefox Live HTTP Üstbilgilerine ek olarak, hem Safari hem de Chrome, üstbilgileri Web Inspector'da nesneye göre ayrılmış olarak görüntüleyebilir.
Bahama

15

Bir sayfanın içeriğini indirmek için basit durumlarda curl veya wget kullanın . Her ikisi de HTTP üzerinden dosya indirmek için tasarlanmış komut satırı araçlarıdır ve birçok seçeneğe sahiptir. Sizin durumunuzda, bu araçları daha çok bir tarayıcı gibi göstermeniz gerekecektir; lutzky'nin cevabı ve penguin359'un cevabı , bu açıdan yararlı olan bazı kıvrılma ve uyandırma seçeneklerinden bahsediyor.

Bazen, oturum açmanız gerektiğinde , önce bir web tarayıcısında manuel olarak oturum açmak, ardından web tarayıcısının çerezlerini dışa aktarmak ( allcookies veya Firefox için Çerezleri Dışa Aktar gibi uzantılar yardımcı olabilir) çok daha kolaydır .

Eğer gerekiyorsa içeriğini ayrıştırmak Bazı sayfalarda veya sonrası formları , sen kıvrılma ve wget daha meraklısı araçlar gerekebilir. Bazı iyi araçlar var LWP(libwww) ve HTML::TreeBuilder(HTML-Tree) veya standart kütüphaneli Python (özellikle httplibvehtmllib ).

Bir web sitesiyle daha karmaşık etkileşimler için referans Perl'in WWW :: Mechanize'dir . Bu Perl kütüphanesi, bir web tarayıcısı gibi POSTing, formlar, çerezler dahil olmak üzere Javascript dahil olmak üzere etkileşim kurmak için üst düzey işlevler tanımlar. Perl sizin çayınız değilse, bu kütüphane Python mechanize ve Ruby Mechanize gibi diğer dillerde benzer özelliklere sahip taklitlere sahiptir .

Son olarak, Javascript'e ihtiyacınız olduğunda , genel yaklaşım, bir tarayıcı otomasyon çerçevesi tarafından yönlendirilen bir web tarayıcısı kullanmaktır. Selenyum ve Watir popüler seçeneklerdir; ayrıca bkz. SeleniumRC dışında JavaScript tarafından sonradan boyanmış içerik de dahil olmak üzere web sayfalarını getirebilecek iyi araçlar var mı?


6

Benim favorim wget, bu yüzden buna bir örnek vereceğim. Yapmak istediğiniz şey tarayıcı oturumunuzu olabildiğince yakın bir şekilde çoğaltmaktır, bu nedenle ilgili komut satırı bağımsız değişkenlerini kullanın. Gerekli olanlar, sitenin tarayıcınızı ne kadar kapsamlı bir şekilde kontrol ettiğine bağlıdır. --referer(sic) genellikle yeterlidir, ancak --user-agentve öğelerine de ihtiyacınız olabilir --load-cookies.

Bu teknik temel olarak tarayıcı sahtekarlığıdır - wgetkendini siteye tarayıcı olarak sunmaya çalışıyorsunuz . Karşılaşacağınız en büyük sorun, verdiğiniz örnek sitede bulunmayan CAPTCHA'dır. Ayrıca, sitenin zamanlama politikalarına (bu durumda 45 saniye) uyduğunuzdan emin olun, aksi takdirde engellenirsiniz.

Muhtemelen aynı dosyayı farklı oturumlara indirmek mümkün değildir - site belirli bir dosyaya belirli bir oturum için indirme ayrıcalıkları verir.


Kapsamlı düşüncelerle iyi cevap. Teşekkürler
xiaohan2012
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.