python 利用selenium爬取百度文庫的word文章

今天學習如何使用selenium庫來爬取百度文庫裏面的收費的word文檔

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from pyquery import PyQuery as pq
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
options.add_argument('user-agent="Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"')
driver = webdriver.Chrome('D:/chromedriver.exe',options=options)
url="https://wenku.baidu.com/view/aa31a84bcf84b9d528ea7a2c.html"
driver.get(url)
html=driver.page_source
page=driver.find_elements_by_xpath("/html/body/div[2]/div[2]/div[6]/div[2]/div[2]/div[1]/div/div[1]")#使用page標記記錄百度文庫中向下翻頁的位置
driver.execute_script('arguments[0].scrollIntoView();', page)

結果運行報錯:

因爲在百度文庫頁面底部需要點擊“繼續閱讀”纔可以加載到完整的頁面,所以必須使用這兩行代碼

page=driver.find_elements_by_xpath("/html/body/div[2]/div[2]/div[6]/div[2]/div[2]/div[1]/div/div[1]")#使用page標記記錄百度文庫中向下翻頁的位置
driver.execute_script('arguments[0].scrollIntoView();', page)

來將瀏覽器滾動到“繼續閱讀”這個位置,然後執行點擊按鈕。

但是卻爆出了黃色部分的錯誤。找了好久,最後在stackoverflow上找到了答案,不得不說,stackoverflow還是強啊

這哥們說,

scrollIntoView()

這個函數是屬於DOM API ,因此你應該使用一個web元素來調用它,而不是一個web元素列表來使用它。

這是我認識到,我可能定位的元素並不是一個,所以我又重新定位了一下元素,更改的代碼如下:

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

driver = webdriver.Chrome('D:/chromedriver.exe')
driver.get("https://wenku.baidu.com/view/aa31a84bcf84b9d528ea7a2c.html")
page = driver.find_element_by_xpath("//*[@id='html-reader-go-more']/div[2]/div[1]/span/span[2]")
driver.execute_script('arguments[0].scrollIntoView();', page) #拖動到可見的元素去
driver.find_element_by_xpath("//*[@id='html-reader-go-more']/div[2]/div[1]/p").click()

然後就可以自動的加載所有文檔內容啦

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章