2017-04-04 257 views
0

使用selenium.webdriver登錄Facebook並獲取公衆人物的HTML頁面(如https://www.facebook.com/DonaldTrump/?fref=ts)可能需要從該頁面抓取發佈的內容。python如何獲取網頁的所有內容動態

我發現,使用selemium.webdriver,只得到網頁的內容在當前屏幕中,例如,當登錄Facebook和想要得到的https://www.facebook.com/DonaldTrump/?fref=ts的所有網頁內容,我得到的僅僅是幾個後在當前屏幕中,但實際上,頁面https://www.facebook.com/DonaldTrump/?fref=ts中的帖子(內容)非常多。

我會滾動鼠標滾輪這麼多次,網頁可以達到它的底部,但現在我得到的是隻有在當前屏幕 有限的內容,你可以告訴我解決的方法,或者告訴我其他方法或除了硒庫,可以登錄facebbook並獲得目標頁面的所有內容(不僅在當前屏幕上的內容)

,我寫的程序是:

import requests 

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

FACEBOOK_URL_PREFIX = "https://www.facebook.com/" 

def web_public_figure(self,p_figure_name): 
    #delete " " in p_figue_name 
    p_figure_name_arr = p_figure_name.split(" ") 
    p_figure_name_str = "".join(p_figure_name_arr) 
    params = r"/?fref=ts" 

    p_f_web_url = FACEBOOK_URL_PREFIX + p_figure_name_str + params 

    # log in the website 
    login_url = "https://www.facebook.com/login.php?login_attempt=1&lwv=110" 
    glovar.webdriver_browser = webdriver.Chrome() 
    glovar.webdriver_browser.get(login_url) 

    # user credentials 
    user = glovar.webdriver_browser.find_element_by_css_selector("#email") 
    user.send_keys('[email protected]') 
    password = glovar.webdriver_browser.find_element_by_css_selector("#pass") 
    password.send_keys('expectopatronum') 
    login = glovar.webdriver_browser.find_element_by_css_selector("#loginbutton") 
    login.click() 
    # the login maybe fail, return to the login page 
    if "login" in glovar.webdriver_browser.current_url: 
     glovar.webdriver_browser.close() 
    time.sleep(10) 

    glovar.webdriver_browser.get(p_f_web_url) 
    html_p_f_page = glovar.webdriver_browser.page_source 

    return html_p_f_page 

p_figure_name"Donald trump",但"html_p_page"只是整個頁面的一部分: https://www.facebook.com/DonaldTrump/?fref=ts,(only當前屏幕中的部分)。

似乎在頁面上有按鈕"see all",你能告訴我怎麼去這樣一個網頁上的所有內容,也許使用圖書館以外硒

回答

1

您可以直接硒做到這一點。這只是以編程方式向下滾動頁面的問題。這個問題被稱爲無限滾動,廣泛描述在this answer

基本上,你只需要讓一個頁面向下滾動一個高度值幾次。像這樣的東西應該這樣做,但我建議你閱讀整個鏈接的帖子。

for i in range(1,100): 
     self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
     time.sleep(4) 
+0

給Jahooo,請你直接修改我的程序,因此,我可以清楚地看到它 – bin