Python自學 爬蟲(5)selenium

2022-01-16 03:50:48 字數 3778 閱讀 5523

pip install selenium
注意:如果chrome在自動更新的話,可能會導致執行出現問題,我們應該去系統服務中禁用chrome的自動更新服務。

其中提供了phantomjs,chromedriver,operadriver等映象位址。】

可以按照以下方式檢視版本是否能對應:

以上是我的路徑。

將chrome根目錄加到系統環境變數中:

即保證selenium能夠執行chromedriver.exe程式即可(所在目錄新增在系統變數)。

import

time

from selenium import

webdriver

#建立乙個chrome瀏覽器例項

driver =webdriver.chrome()

#driver.get("

")#睡眠5s觀察效果

time.sleep(5)

#退出瀏覽器

driver.quit()

import

time

from selenium import

webdriver

#建立乙個chrome瀏覽器例項

driver =webdriver.chrome()

#設定視窗大小為1920x1080

#driver.set_window_size(1920,1080)

#設定視窗為全屏

driver.maximize_window()

#driver.get("

")#driver.find_element_by_id("

kw").send_keys('

python')

#driver.find_element_by_id("su"

).click()

#睡眠5s觀察效果

time.sleep(5)

#退出瀏覽器

driver.quit()

使用以下方式獲取所有的cookie:

import

time

from selenium import

webdriver

driver =webdriver.chrome()

driver.get(

"")#獲取所有的cookie資訊

cookies =driver.get_cookies()

#只保留cookie的名稱和值

cookies =

print

( cookies)

#time.sleep(3)

driver.quit()

#退出瀏覽器。另外driver.close()是關閉頁面,當關閉了最後乙個頁面,則退出瀏覽器。

driver.page_source  #

對應f12中elements的內容

driver.current_url  #

對應當前訪問的url,即當前**所在位置對應瀏覽器所在url

li_list = driver.find_elements_by_xpath("

//ul[@id='detail-list']/li

") #

獲取多個li標籤

for li in

li_list:

li.find_element_by_xpath(

".//h1/p

") #

繼續使用xpath獲取其中的乙個標籤

注意,find_elements_by_xpath是獲取多個標籤的列表,而find_element_by_xpath是獲取乙個標籤(第乙個)。並且使用find_element_**方法,只能獲取標籤元素,而不能用於獲取文字,例如 "

.//h1/p/text()

" 就不是乙個標籤,會報錯: "

.//h1/p/text()

"is: [object text]. it shoud be an element.

如果要獲取標籤的屬性值:

li.find_element_by_xpath("

.//h1/p

").text

li.find_element_by_xpath(

".//h1/a

").get_attribute("

href

")

driver.find_element_by_link_text("

").get_attribute("

href

")

偏文字匹配(即區域性包含文字):

driver.find_element_by_partial_link_text("

下一").get_attribute("

href

")

除了以上查詢元素的方式,selenium還支援其他的方式,例如:

driver.find_elements_by_tag_name()

driver.find_elements_by_class_name()

driver.find_elements_by_css_selector()

我們知道,iframe標籤是可以嵌入在html頁面中的另乙個頁面,所以我們直接使用driver是無法拿到iframe中的元素的。需要進行一下操作:

import

time

from selenium import

webdriver

driver =webdriver.chrome()

driver.get(

"")#對應登入框的標籤為iframe id=login_frame

driver.switch_to.frame("

login_frame")

#找到iframe中的username的輸入框

username = driver.find_element_by_xpath("

//input[@id='u']")

#輸入資料

username.send_keys("

4774177")

time.sleep(3)

driver.quit()

可以看到,我們以qq郵箱登陸頁面為例,將driver切換到iframe,然後找到輸入框輸入資料。

driver.switch_to.default_content()
在selenium中,只有請求第乙個頁面的時候,會自動等待頁面載入完畢後再獲取標籤物件。

這時我們需要設定乙個等待時間,有三種方式:

import

time

time.sleep(3) #

強制等待3秒

設定乙個最長等待時間,如果在時間內未找到元素,則丟擲異常:

webdriverwait(driver,10).until(ec.presence_of_element_located((by.id,"

kw"),message="")

簡單的設定乙個最大等待時間,單位是秒

driver.implicitly_wait(10) #

隱式等待10秒

關於以上三種等待方式的優缺點,參考:

Python自學爬蟲

解除安裝前面 這是乙個半自動爬蟲,也就是手動的比較多 也是個人學習效果展示 如果對看到的人有幫助 那再好不過了 匯入正規表示式模組和csv模組 import re import csv 讀取檔案 with open source.txt r encoding gbk as f all str f.r...

杭州自學python爬蟲 自學PYTHON爬蟲

response urllib2.urlopen urlopen url,data,timeout 第乙個引數url即為url,第二個引數data是訪問url時要傳送的資料,第三個timeout是設定超時時間。第二三個引數是可以不傳送的,data預設為空none,timeout預設為 socket....

python免費自學爬蟲 python爬蟲學習

近日,學習爬蟲基礎,自己寫了乙個小指令碼。目標 每天晚上定時傳送第二天的工作專案到qq郵箱。目的 頭天晚上得到第二天的工作計畫,好決定頭天晚上是否能喝酒過量 是否能麻將通宵等等等等。哈哈!思路 1 從停電申請系統,統計出第二日的工作專案。2 每天晚上定時傳送該專案到qq郵箱。要解決的主要問題 1 從...