2016-05-20 17 views
4

Ich versuche, durch this Seite blättern. Nach dem Scrollen bis zum Ende der Seite muss ich auf die Schaltfläche "MEHR anzeigen" klicken, aber ich kann es nicht mit Selen finden.Klicken Sie auf "Zeige mehr" -Taste auf nytimes.com mit selen

self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
self.driver.find_element_by_class_name('button load-more-button').click() 

aber ich erhalte eine InvalidSelectorException

Antwort

0

benutzen Sie den folgenden Code:

elem = self.driver.find_element_by_css_selector(".button.load-more-button[aria-controls$='set-latest']"); 


//this line will scroll down to make element visible 
self.driver.execute_script("window.scrollTo(" + elem.getLocation().x + "," +(elem.getLocation().y- 100) + ");"); 

elem.click(); 
+0

ist das @Fotis funktioniert? – noor

0

können Sie verwenden find_element_by_css_selector

.find_element_by_css_selector("button.button.load-more-button").click() 

Sie nicht find_element_by_class_name verwenden können, wenn Sie mehrere CSS-Klassen haben.

Der Code funktioniert wie folgt:

In [22]: from selenium import webdriver 


In [23]: dr = webdriver.PhantomJS() 

In [24]: dr.get("http://www.nytimes.com/column/corner-office") 

In [25]: btn = dr.find_element_by_css_selector("button.button.load-more-button") 

In [26]: btn 
Out[26]: <selenium.webdriver.remote.webelement.WebElement at 0x7f50c34d7668> 

In [27]: btn.click() 

Mit Firefox, Einstellung .maximize_window() funktioniert auch:

from selenium import webdriver 


dr = webdriver.Firefox() 
dr.maximize_window() 
dr.get("http://www.nytimes.com/column/corner-office") 

btn = dr.find_element_by_css_selector("button.load-more-button") 
btn.click() 

auf Firefox und Chtorm nachdem Sie laden Hier klicken um mehr, wenn Sie dann Scrollen müssen, um den Rest zu erhalten, die Schaltfläche ist nach dem ersten Klick nicht vorhanden:

dr = webdriver.Firefox() 
dr.maximize_window() 
dr.get("http://www.nytimes.com/column/corner-office") 

btn = dr.find_element_by_css_selector("button.load-more-button") 
btn.click() 
print(len(dr.find_elements_by_xpath("//h2[@class='headline']"))) 
dr.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
print(len(dr.find_elements_by_xpath("//h2[@class='headline']"))) 

Welche gibt Ihnen:

44 
66 
+0

Danke, ich habe dies in eine for-Schleife für eine semi-infinite Scroll, aber nach der ersten Iteration bekomme ich 'Element ist nicht an Punkt (x, y) anklickbar. Anderes Element würde den Klick erhalten:

''. Ich habe auch eine time.sleep (3) hinzugefügt, damit das Element angezeigt wird, aber es wird immer noch nicht anklickbar – Fotis

+0

@Fotis, welchen Webtreiber verwendest du? –

-1

ActionChains Klasse kann in dem Fall verwendet werden, in denen Sie Ausnahme wie 'ein anderes Element erhalten würde, klicken Sie auf' bekommen.

Versuchen Sie unter Code, sollte es funktionieren.

elem = self.driver.find_element_by_css_selector("button.button.load-more-button") 

self.driver.ActionChains(driver).move_to_element(elem).click(elem).perform() 
Verwandte Themen