2016-05-20 7 views
4

私はthisページをスクロールしようとしています。 ページの一番下までスクロールした後、「詳細を表示」ボタンをクリックする必要がありますが、セレンで見つけることはできません。セレンでnytimes.comの "more show"ボタンをクリックしてください

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

しかし、私はあなたがfind_element_by_css_selectorあなたが複数のCSSクラスを持っているときは、find_element_by_class_nameを使用することはできません

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

を使用することができますInvalidSelectorException

答えて

0

は、以下のコードを使用します。

以下のコードを試してください。うまくいくはずです。

+0

はこれが働いています@Fotis? – noor

0

を取得します。

示すように、コードは動作します

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() 

Firefoxで、.maximize_window()を設定することも正常に動作します:FirefoxとChtormで

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() 

あなたは、あなた一度以上の負荷をクリックした後、残りの部分を取得するためにスクロールしなければならない、最初のクリック後にボタンはそこにありません:

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']"))) 
あなたを与える

:あなたは「をクリックして受け取ることになる他の要素」のような例外を取得する場所

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

ありがとう、私はこれを半無限のスクロールのためのループに入れますが、最初の反復の後、私は 'Elementはポイント(x、y)でクリックできません。他の要素はクリックを受け取ります:

''。要素を表示するためにtime.sleep(3)を追加しましたが、それでもクリック可能にはなりません – Fotis

+0

@Fotis、どのwebdriverを使用していますか? –

-1

ActionChainsクラスがケースで使用することができます:

44 
66 
関連する問題