2017-05-29 6 views
0

私はページを掻き集めてすべてのリンクを収集したい。このページには30のエントリが表示され、完全なリストを表示するには、すべてをロードするボタンをクリックする必要があります。ボタンをクリックしてSeleniumで追加の要素をロードした後に完全なHTMLを読み込む

私は次のコードを使用しています:

from selenium import webdriver 
from bs4 import BeautifulSoup 

driver = webdriver.PhantomJS() 
driver.get('http://www.christies.com/lotfinder/searchresults.aspx?&searchfrom=header&lid=1&entry=edgar%20degas&searchtype=p&action=paging&pg=all') 

labtn = driver.find_element_by_css_selector('a.load-all') 
labtn.click() 

elem = driver.find_element_by_xpath("//*") 
source_code = elem.get_attribute("outerHTML") 
soup = BeautifulSoup(source_code, 'lxml') 

url_list = [] 
for div in soup.find_all(class_ ='image-container'): 
      for childdiv in div.find_all('a'): 
       url_list.append(childdiv['href']) 
print(url_list) 

は、ここで私はまだ元の30個のリンクと初期のコードを取得していますHTMLマークアップ

<div class="loadAllbtn"> 
    <a class="load-all" id="loadAllUpcomingPast" href="javascript:void(0);">Load all</a> 
</div> 

です。私はセレンを正しく使用していないようで、私が間違っていることを知りたいと思っています。

これまでのところセレンが働いています。ノードJSがインストールされ、私はスクリーンショットを作成してファイルに保存しました。

答えて

1

[すべてを読み込む]をクリックすると、すべてのアイテムを追加受信するように要求されます。あなたは、サーバーの応答をいくつかの時間を待つ必要があります。

from selenium.webdriver.support.ui import WebDriverWait as wait 

driver = webdriver.PhantomJS() 
driver.get('http://www.christies.com/lotfinder/searchresults.aspx?&searchfrom=header&lid=1&entry=edgar%20degas&searchtype=p&action=paging&pg=all') 

labtn = driver.find_element_by_css_selector('a.load-all') 
labtn.click() 

wait(driver, 15).until(lambda x: len(driver.find_elements_by_css_selector("div.detailscontainer")) > 30) 

コード上記の項目の数が30を超えるまでは15秒まで待つことを許可する必要があります。次に、アイテムの完全なリストでページソースをスクラップできます。

P.S.これらのコードを使用する必要はありません。

elem = driver.find_element_by_xpath("//*") 
source_code = elem.get_attribute("outerHTML") 

ページソースを取得することに注意してください。ただ試してみてください

source_code = driver.page_source 

P.P.Sまた、各項目へのリンクを得るのにBeautifulSoupを使用する必要はありません。

links = [link.get_attribute('href') for link in driver.find_elements_by_css_selector('div.image-container>a')] 
+0

私はあなたのコードを試しました。それが初めて働いたとき、それはしなかった。それから、秒を増やしました。今は大丈夫です。ありがとうございました – zinyosrim

関連する問題