2016-08-01 20 views
0

Die Seite, die ich krieche, hat ein Element wie folgt.Scrapy Selen Klicken Sie auf Javascript Verbindung

Ich möchte in der Lage sein, auf dieses "Mehr" in Selen zu klicken und dann die Antwort zu analysieren. Ich habe das in meiner Scrapy Spinne.

seemore = response.xpath('//a[contains(@data-action,"a-expander-toggle")]') 

seemore.click() 

Aber wenn ich die seemore.click(), es ausgibt. Wenn ich meinen Xpath-Selektor drucke, sehe ich das.

# Log the "see more" link 
self.log(response.xpath('//a[contains(@data-action,"a-expander-toggle")]')) 

# Log output 
[<Selector xpath='//a[contains(@data-action,"a-expander-toggle")]' 
data=u'<a href="javascript:void(0)" data-action'>] 

Es ist wahrscheinlich nicht richtig den Link zu lesen. Ist mein XPath korrekt, um diese Art von Link auszuwählen?

+0

Was der Fehler ist, Sie bekommen? – Josh

+0

Ich sehe keinen Fehler. Wenn es zu seemore.click() geht, geht es zu meinem ausgenommenen Block, wo ich ausstelle. Gibt es eine Möglichkeit, die Ausnahme auszudrucken? –

+0

Versuchen Sie folgendes: 'Ausnahme: print ("Unerwarteter Fehler", sys.exc_info() [0]) raise' –

Antwort

0

Ja, wie Valdir Stumm Junior sagte, ich glaube, dass Sie die Click-Funktion als ein Webtreiber-Element aufrufen müssen. Wahrscheinlich nicht das eleganteste Beispiel, aber hier einige (nicht getestet) Beispielcode Sie für Ihren Fall anpassen könnte ..

from selenium.common.exceptions import NoSuchElementException 

...

def parse_page(self, response): 
    self.driver.get(response.url) 
    try: 
     seemore = driver.find_element_by_class_name('a-expander-prompt') 
    except NoSuchElementException: 
     # insert how you want to handle this e.g. break, log etc 

    seemore.click() 

Weitere Informationen dazu, wie ein Handle für Selen Elemente zu erhalten hier:

http://selenium-python.readthedocs.io/locating-elements.html