2016-04-12 30 views
2

Kısmen JS yapılı bağlantılar ve içinde bir şeyler olan bir web sitesini (Python/Selenium kullanarak) kazımaya çalışıyorum. Benim durumumda, bağlantı böyle bir görünüm elde etmek istiyorum: http://www.somesite.de/blah/ aşağıdaki biri basitçe URL'den doğrudan kazımak olamaz yana {{link_ID}}Python 3 webscraping sorunu (JS ile ilgili)

, benim Python kod gibidir:

def URL_from_JS (URL): 
    driver = webdriver.PhantomJS(executable_path=r'C:\###\phantomjs-2.1.1-windows\bin\phantomjs.exe') 
    driver.get(URL) 

    link = driver.find_element_by_xpath('//a[@title="Zum Expose"]') 
    new_URL = link.get_attribute('href') 
    print(new_URL)  #for testing reasons 
    driver.close() 
    return new_URL 

Bu eserler amaçlandığı gibi, JS kodu görünürde yürütülmez, çünkü sonuç tam olarak yukarıda yazıldığı gibi (yani, http://www.somesite.de/blah/ {{link_ID}}). Öğenin görünür olmasını beklemek, Zaman Aşımı Hataları'ndan başka bir şeye yol açmadı. {{Link_ID}}, HTML kodunda bazı satır satırlarını içe aktarılan bazı harici .js dosyasında kullanılan bir değişkeni referans alır.

İçe aktarılan Javascript kodunu manuel olarak çalıştırmam gerekir mi? Kodumun neden amaçlandığı gibi çalışmadığına dair bir fikrim yok ...

Yardımlarınız için teşekkürler!

+0

"JS" dosyasından "Python" koduna dize nasıl gönderilir? – Andersson

+0

Sorunuzu gerçekten anlama: Python'a vom JS dizeleri yollamıyorum. Büyük olasılıkla JS kodu driver.execute_script kullanarak Python'da çalıştırılacak, ancak Selenium'un nasıl çalıştığını anladığımda, bu aslında gereksiz olmalı. – Boandlkramer

+0

tamam .... Burada {{link_ID}} 'nereden geliyor? 'Href = "http://www.somesite.de/blah/{{link_ID}}" – Andersson

cevap

0

Siteye el ile göz attığımda, bağlantıyı yeni bir sekmede açar. PhantomJS sekmeleri

desteklemediği

Sen elemanı görebilirler ancak piton' Eğer burada muhtevası,

ikinci sekmesine, ilk linke anahtarı tıklayın ve ayrıştırın webdriver firefox ile aynı deneyin simüle edebilirsiniz t tanımak, sonra çerçeveler ile bir sorun olabilir, gerekli öğe ve python sahip olduğumuz gövde etiketinde iframe'ler olabilir

Çerçevenin adını tanımlamanız ve

yapmalısınız

driver.switch_to.frame ("<>")

yaptım diğer webdrivers bazı kontroller (FF, Krom, Phantom): hepsi çok aynı durumla başarısız oldu (eleman görünmez) solunu

Ardından kumanda

hth

+0

Cevabınız için teşekkür ederiz. Temel olarak, burada da aynı sorun var: yeni pencereyi açmak için tıkla() 'a gerek duyduğumuz bağlantı elemanı görünmeyecek, sadece görünür/tıklanabilir olmaz. Sürücünün öğeyi bulmasına izin verirseniz, ardından tıklatırsanız, Python görünmez bir istisna atar, eğer bir bekleme yaparsanız, zaman aşımı istisnası alırsınız. Nedeni büyük olasılıkla, linkin bitiş kısmını oluşturan JS'nin hiçbir zaman idam edilmemesidir. – Boandlkramer

+0

Öğeyi görebiliyor ancak python tanımadığını fark edemiyorsanız, o zaman çerçeveler ile ilgili bir sorun olabilir, gerekli öğe ve python'un üst çerçevede aradığı gövde etiketinde iframe'ler olabilir unfortunatley Ardından kumanda hth Bu makuldür –

+0

bir klik yapın ("<>") driver.switch_to.frame, ama durumda çerçevenin adını tanımlamak ve yapmak zorundayız. "Frame"/"frameset"/"iframe" için kaynak kodunda hızlı arama, herhangi bir isabet döndürmedi. – Boandlkramer

0

GÜNCELLEME bir tuşa basıyor . Zaman aşımı istisnası. Sonraki, diğer bağlantıların otomatik olarak tıklatılmasını denedim - bu da başarısız oldu. Tüm bu bağlantıların içlerinde bazı Script'ler olduğunu anladım, çünkü html'deki "kodlanmış" linkler ile kodum tasarlandığı gibi çalıştı. Bu yüzden sitemi normal Firefox oturumumda JS devre dışıyken inceledim ve tüm bu bağlantılar ve şeyler gerçekten görünmezdi (ve tıklanabilir değil). Artık

, benim soru/sorun belirtebildiklerinden% 100 eminim: şey tamamen JavaScript Sayfamı en yürütülmesini Selenyum önler; bu yüzden kodum çalışmıyor. Birisinin bu soruna neyin neden olabileceği hakkında bir fikri var mı?