天天看點

python爬蟲之selenium,浏覽器通路搜尋頁面提取,及隐藏浏覽器

作者:運維筆記ywbj

一、 selenium簡介

如果連結簡單,爬蟲可以通過連結用requests庫提取頁面資訊,如爬取豆瓣top250影片資訊,連結簡單易懂。參考:爬取豆瓣top250影片資訊

但如果遇到一些搜尋之類的,基于js動态加載的網頁,以上就不适合,如爬蟲b站,搜尋“爬蟲”頁面,第一頁連結如下,第二頁又是很長沒規律的連結。很難用requests庫提取頁面。

https://search.bilibili.com/all?keyword=%E7%88%AC%E8%99%AB&from_source=webtop_search&spm_id_from=333.1007&search_source=5           

針對以上情況,我們可以通過浏覽器直接通路每個頁面,然後提取頁面。當然是讓爬蟲自己打開浏覽器,輸入内容通路,然後提取頁面元素。這個過程就要用到 selenium 庫。

selenium其實它就是一個自動化測試工具,支援各種主流的浏覽器。遇到python,selenium 就變成了爬蟲利器。

二、安裝selenium配置環境變量

1、安裝

pip install selenium           

下載下傳浏覽器驅動,我用的是 Chrome 浏覽器,是以下載下傳Chrome驅動即可,當然你可以下載下傳其他浏覽器驅動。下載下傳連結:https://chromedriver.chromium.org/,找到和自己浏覽器版本一緻或者最接近的。

2、配置環境變量

下載下傳解壓後,配置環境變量。

解壓,然後建立一個存放浏覽器驅動的目錄,如: D:\Python\Driver , 将下載下傳的浏覽器驅動檔案(例如:chromedriver、geckodriver)丢到該目錄下,我這裡是chromedriver。

我的電腦–>屬性–>系統設定–>進階–>環境變量–>系統變量–>Path,将“D:\Python\Driver”目錄添加到Path的值中。比如:Path字段;D:\Python\Driver

關于環境變量不生效的問題:

1:嘗試将浏覽器驅動,直接放在python安裝目錄試試

2:配置環境變量後,重新開機電腦生效(我就是重新開機才生效)

三、打開浏覽器并自動搜尋

1、浏覽器自動通路

代碼,打開浏覽器,并通路。

#導入 web 驅動子產品
from selenium import webdriver
#建立了一個 Chrome 驅動
driver = webdriver.Chrome()
#驅動通路網頁
driver.get("https://www.bilibili.com/")
#代碼完成後,關閉浏覽器
#driver.quit()           

以上,執行代碼自動打開浏覽器

python爬蟲之selenium,浏覽器通路搜尋頁面提取,及隐藏浏覽器

2、輸入關鍵字并搜尋

分析代碼,可以看到,搜尋框和按鈕鍵的class元素值為 nav-search-input 和 nav-search-btn

python爬蟲之selenium,浏覽器通路搜尋頁面提取,及隐藏浏覽器

找到元素後,用find_element方法定位找到此元素,定位有多種方式。

id定位:find_element_by_id()
name定位:find_element_by_name()
class定位:find_element_by_class_name()
link定位:find_element_by_link_text()
partial link定位:find_element_by_partial_link_text()
tag定位:find_element_by_tag_name()
xpath定位:find_element_by_xpath()
css定位:find_element_by_css_selector()           

以上也可以用 `driver.find_elements(By.ID, 'xxx')` 的方式,對應值。

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"           

我這裡用class值定位即可。

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.bilibili.com/")

#找到元素值
input = driver.find_element(By.CLASS_NAME,'nav-search-input')
button = driver.find_element(By.CLASS_NAME,'nav-search-btn')

#輸入關鍵詞
input.send_keys('爬蟲')
#點選按鈕
button.click()           

注:以上如果報錯提示沒有By這個類型,需要導入包from selenium.webdriver.common.by import By

執行效果:

python爬蟲之selenium,浏覽器通路搜尋頁面提取,及隐藏浏覽器

以上基本的搜尋動作就完成了。

四、切換視窗提取網頁資訊

有網頁了,可以用以前學的[BeautifulSoup]庫提取頁面代碼元素了。

1、切換視窗

由于搜尋頁面是重新打開了一個頁面,是以還需要在代碼中切換,否則預設的都是第一個頁面。

window_handles:擷取頁面句柄,傳回值得為清單list。

switch_to.window:切換頁面。

#擷取所有頁面句柄
windows = drive.window_handles
#切換頁面為最後一個句柄,也是最後一個頁面
drive.switch_to.window(windows[-1])
#print(windows)           

以上得到的print(windows)句柄值,值為:

['CDwindow-EED0C1AE55C6A49DE55D69130254EC0F', 'CDwindow-D04BF7FFBEA89EFB93A990733008FD92']           

2、擷取頁面源代碼提取元素

切換頁面後,用 page_source 擷取頁面源代碼。

擷取源代碼後,就可以提取元素了,分别找到對應的class值即可。這裡提取值有,視訊名稱,up主,播放量,時長,連結,日期。

python爬蟲之selenium,浏覽器通路搜尋頁面提取,及隐藏浏覽器

最後代碼為:

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup


driver = webdriver.Chrome()
driver.get("https://www.bilibili.com/")


input = driver.find_element(By.CLASS_NAME,'nav-search-input')
button = driver.find_element(By.CLASS_NAME,'nav-search-btn')

input.send_keys('爬蟲')
button.click()

windows = driver.window_handles
#print(windows)
driver.switch_to.window(windows[-1])
#等待5秒
time.sleep(5)
#擷取源代碼
html=driver.page_source

soup = BeautifulSoup(html,'lxml')
list = soup.find(class_='video-list row').find_all(class_="bili-video-card")

for item in list:
    #print(item)
    video_name = item.find(class_='bili-video-card__info--tit').text
    video_up = item.find(class_='bili-video-card__info--author').string
    video_date = item.find(class_='bili-video-card__info--date').string
    video_play = item.find(class_='bili-video-card__stats--item').text
    video_times = item.find(class_='bili-video-card__stats__duration').string
    video_link = item.find('a')['href'].replace('//','')
    print(video_name,video_up,video_play,video_times,video_link,video_date)
driver.quit()           

執行結果為:

【爬蟲1000集】目前B站最完整的爬蟲教程,包含所有幹貨内容!這還沒人看,我不更了! python大講堂呀 24.6萬 29:14:25 www.bilibili.com/video/BV1bL4y1V7q1  · 4-25
2020年Python爬蟲全套課程(學完可做項目) 路飛學城IT 150.8萬 43:30:57 www.bilibili.com/video/BV1Yh411o7Sz  · 2020-7-9
Python超強爬蟲8天速成(完整版)爬取各種網站資料實戰案例 Python網紅Alex 51.6萬 20:39:05 www.bilibili.com/video/BV1ha4y1H7sx  · 2020-12-7
Python爬蟲實戰教程:批量爬取某網站圖檔 python學習者 80.5萬 09:31:34 www.bilibili.com/video/BV1qJ411S7F6  · 2019-11-13
【附源碼】全網最新的Python爬蟲教程+實戰項目案例,超适合小白練手的實戰項目!(最新錄制) Python王子秦老師 3.6萬 41:15 www.bilibili.com/video/BV1gd4y1i75v  · 10-8
Python課程天花闆,Python入門+Python爬蟲+Python資料分析5天項目實操/Python基礎.Python教程 IT私塾 400.8萬 20:24:40 www.bilibili.com/video/BV12E411A7ZQ  · 2020-3-20
尚矽谷Python爬蟲教程小白零基礎速通(含python基礎+爬蟲案例) 尚矽谷 55.8萬 22:19:04 www.bilibili.com/video/BV1Db4y1m7Ho  · 2021-9-1
2022年Python爬蟲小白到大神-網絡爬蟲+反爬蟲(爬取各種網站資料)完整版包含20個項目案例,學完可自己爬取! Python人生苦短 6.1萬 14:40:56 www.bilibili.com/video/BV1rv4y1K7yV  · 5-4
Python超強爬蟲5天速成(完整版)爬取各種網站資料實戰案例 Python網紅Alex 7300 18:53:17 www.bilibili.com/video/BV1BD4y1k7Po  · 10-9
【Python爬蟲】清華大學20小時講完的Python爬蟲項目實戰,全程幹貨無廢話!建議收藏~ H顧兮兒 424 55:46:15 www.bilibili.com/video/BV1QN4y1A7oc  · 10-10
【2022最新】32個Python實戰項目,練完即可就業,從入門到進階,基礎到架構,你想要的全都有,建議碼住,允許白嫖!實戰_項目_練手_小白_爬蟲_程式設計_科技 張妹兒丫 113 40:44:18 www.bilibili.com/video/BV1PR4y1R7Xc  · 13小時前
寫爬蟲真的會坐牢嗎? 知安局 60.5萬 12:06 www.bilibili.com/video/BV1KK4y1s7iK  · 2021-1-22
【全套34課時】2022最新完整版Python爬蟲入門教程+實戰項目案例,網絡爬蟲教程,零基礎小白可學,學完可做項目兼職 Python精選教程 811 19:43:13 www.bilibili.com/video/BV1D8411x7Kx  · 10-10
3小時搞定 Python爬蟲項目(爬取資料+資料整理+資料可視化) Python牛牛牛 6.6萬 29:32:59 www.bilibili.com/video/BV1hS4y1b7EJ  · 5-14
2021年最新Python爬蟲教程+實戰項目案例(最新錄制) 路飛學城IT 68萬 14:40:22 www.bilibili.com/video/BV1i54y1h75W  · 2021-3-5
【Python爬蟲教程】花9888買的Python爬蟲全套教程2021完整版現分享給大家!(已更新項目)——附贈課程與資料 小猿Python的首頁 49.2萬 40:10:11 www.bilibili.com/video/BV1ZT4y1d7JM  · 2021-10-8
月薪1w的程式員 爬淘寶被判3年 寫爬蟲别碰這3條! 麥叔程式設計 20.1萬 07:56 www.bilibili.com/video/BV1ih411a7PK  · 2021-6-14
Python爬蟲開發實戰從入門到精通大神崔慶才零基礎視訊52講全 T博士雲課堂 1.9萬 12:15:35 www.bilibili.com/video/BV1pf4y1H72c  · 2021-8-29
卧槽!原來Python爬蟲可以這麼玩?學完這10個練手案例,說明你才是真的入門了!!! 圖靈python 7764 39:20 www.bilibili.com/video/BV1Jd4y1i7cH  · 10-9
3小時搞定 Python爬蟲項目(爬取資料+資料整理+資料可視化) 路飛IT學城 5.5萬 02:16:47 www.bilibili.com/video/BV1Ry4y1V7PE  · 2021-8-18
【爬蟲篇】《極客Python之效率革命》 魚C-小甲魚 18.4萬 01:47:55 www.bilibili.com/video/BV1wp411o7dz  · 2018-5-20
黑馬程式員Python爬蟲基礎,快速入門Scrapy爬蟲架構 黑馬程式員 27.9萬 04:17:09 www.bilibili.com/video/BV1jx411b7E3  · 2017-8-22
爬蟲一小時,完事一分鐘【第二彈】 苦瓜不可以 9.7萬 05:18 www.bilibili.com/video/BV1Hr4y1w71G  · 2020-11-10
【十大案例 源碼完整】後悔沒早學Python爬蟲,省時又省力⚡憑實力摸魚丨全網圖檔、視訊、資料...一鍵擷取! 彭有才Python 1.1萬 02:52:35 www.bilibili.com/video/BV14T411P7TD  · 10-8
Python爬蟲程式設計基礎7天速成(2022全新合集)Python入門+資料分析,0基礎小白的入門級别教科書! 圖靈學院教程 4.7萬 51:00:54 www.bilibili.com/video/BV1Fa411q75C  · 4-11
【爬蟲1000集】目前B站最完整的爬蟲教程,包含所有幹貨内容!這還沒人看,我不更了! Python萬能膠 14.7萬 14:40:56 www.bilibili.com/video/BV1qB4y1D77o  · 6-4
2022最新Python爬蟲教程小白零基礎速通(涵蓋所有核心知識)立刻收藏! 圖靈學院教程 2.6萬 17:38:51 www.bilibili.com/video/BV133411F7Cp  · 7-20
【python爬蟲1000集】目前B站最完整的爬蟲教程,包含所有幹貨内容!這還沒人看,我不更了! 資料分析女王 73 14:40:56 www.bilibili.com/video/BV11N4y1A7cj  · 14小時前
【敢稱全站第一】B站最強的Python爬蟲進階教程!自學必看,幫你少走99.9%的彎路~學不會你找我(爬蟲JS逆向/逆向算法/逆向混淆/APP逆向/爬蟲實戰) 彭有才Python 2.3萬 07:49:30 www.bilibili.com/video/BV1sG411n7Zf  · 7-18
2022自學爬蟲,這一套就夠了,别再亂學其他。 眨塑炊俺未沼臻 3.2萬 15:45:05 www.bilibili.com/video/BV1JP4y1u72J  · 3-18
Python爬蟲全套教程,手把手教學 ,學完即可接單!!! Python善善 2.1萬 04:10:56 www.bilibili.com/video/BV13e4y197vg  · 7-22
終于拿到了!(完整版)Python超強爬蟲7天速成爬取各種網站資料 【python3.8爬蟲基礎+實戰】 程式設計界-小蝸牛 3.2萬 23:57:57 www.bilibili.com/video/BV1rL411G7ep  · 2021-10-20
代碼總是學完就忘記?100個爬蟲實戰項目!讓你沉迷學習丨學以緻用丨下一個Python大神就是你! python基礎入門 8.4萬 71:15:41 www.bilibili.com/video/BV1SA4y1976A  · 4-14
(正版獨家)Python教程巅峰之作,聽覺上的享受(Python入門,Python爬蟲,資料分析) IT私塾 22.2萬 31:25:34 www.bilibili.com/video/BV1yY4y1w7r8  · 8-5
Python爬蟲實戰教程:爬蟲爬取某APP批量圖檔,臉紅。 天美不會模組化啊 3.5萬 39:07 www.bilibili.com/video/BV18v411q76u  · 2020-7-22
2022自學爬蟲全套,學完可接項目(無私分享) 小北不熬夜啊啊 3.8萬 13:43:02 www.bilibili.com/video/BV1iu411C79S  · 4-16
Python爬蟲從基礎到精通,企業級講解,集集幹貨,手把手帶項目案例實戰 圖靈Python何老師 2.5萬 45:20:00 www.bilibili.com/video/BV1Yi4y1S7Pi  · 4-8
一單最少50塊,學完爬蟲就能實作,2021年最新python爬蟲教程,從入門到實踐,通俗易懂(完結) 左上角的貓 2.2萬 14:23:31 www.bilibili.com/video/BV1Pg411V768  · 2021-9-1
【Python教程】從入門到精通Python網絡爬蟲,核心技術、架構與項目實戰,适合入門學習(小白定制版) 圖靈學院教程 2.9萬 39:08:57 www.bilibili.com/video/BV1R34y1h7jx  · 5-16
【Python爬蟲教程】爬蟲寫得好,牢飯吃的飽!Python 爬蟲零基礎入門到實戰系列!(附課件源碼資料) 人工智能與Python 11.7萬 27:51:01 www.bilibili.com/video/BV1Hb4y167c9  · 2021-7-20
10天學完Python爬蟲全套教程,現在分享給大家(B站最新) Python_子木 12.2萬 24:57:21 www.bilibili.com/video/BV16f4y197D6  · 2020-8-11
【最強攻略】用魔法打敗魔法,Python爬蟲輕松通關羊了個羊!!! 咩咩資料分析大全 1.6萬 19:41:57 www.bilibili.com/video/BV17D4y1i7nX  · 9-20           

這樣單個頁面的所有視訊資訊提取完成了。

五、判斷網頁是否加載完成

以上代碼種,切換頁面後,有一個等待5秒的代碼。

time.sleep(5)           

如果不加這行,有時候擷取不到完整的資訊而報錯,因為代碼元素沒有加載完成,代碼就執行完了,進而擷取不到元素值而報錯,是以必須加一個等待時間。報錯如下:

Traceback (most recent call last):
  File "D:\Python\test_selenium.py", line 42, in <module>
    video_name = item.find(class_='bili-video-card__info--tit').text
AttributeError: 'NoneType' object has no attribute 'text'           

time.sleep(5),如果臨時調試,也可以用,但是在實際環境,盡量少用,因為實際環境網絡差異,可能5秒也加載不出,而報錯。是以需要靈活點的方式,有三種等待方法。

1、強制等待

sleep(x) x機關為s,sleep等待的是元素 。

不管你浏覽器是否加載完了,程式都得等待,時間一到,繼續執行下面的代碼,作為調試很有用。

隐性等待和顯性等待可以同時用。

注意:等待的最長時間取兩者之中的大者

2、隐性等待

隐性等待的是頁面,implicitly_wait(x) x機關為s。

一旦設定,這個隐式等待會在WebDriver對象執行個體的整個生命周期起作用,它不針對某一個元素,是全局元素等待,即在定位元素時,需要等待頁面全部元素加載完成,才會執行下一個語句。

如果超出了設定時間的則抛出異常。

缺點:當頁面某些js無法加載,但是想找的元素已經出來了,它還是會繼續等待,直到頁面加載完成(浏覽器标簽左上角圈圈不再轉),才會執行下一句。某些情況下會影響腳本執行速度

3、顯性等待

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)           

需要通過from selenium.webdriver.support.wait import WebDriverWait導入子產品

  • driver:浏覽器驅動
  • timeout:最長逾時時間,預設以秒為機關
  • poll_frequency:檢測的間隔步長,預設為0.5s
  • ignored_exceptions:逾時後的抛出的異常資訊,預設抛出NoSuchElementExeception異常。

配合該類的until()和until_not()方法

程式每隔poll_frequency秒看一眼,如果條件成立了,則執行下一步,否則繼續等待,直到超過設定的最長時間,然後抛出TimeoutException。

WebDriverWait與expected_conditions結合使用,示例:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(driver,10,0.5)
element =wait.until(EC.presence_of_element_located((By.ID,"kw"),message="")
# 注意,如果省略message=“”,則By.ID外面是兩層()           

expected_conditions類提供的預期條件判斷的方法:

以下兩個條件類驗證title,驗證傳入的參數title是否等于或包含于driver.title
title_is
title_contains

以下兩個條件驗證元素是否出現,傳入的參數都是元組類型的locator,如(By.ID, ‘kw’)
顧名思義,一個隻要一個符合條件的元素加載出來就通過;另一個必須所有符合條件的元素都加載出來才行
presence_of_element_located
presence_of_all_elements_located

以下兩個條件判斷某段文本是否出現在某元素中,一個判斷元素的text,一個判斷元素的value
text_to_be_present_in_element
text_to_be_present_in_element_value

以下條件判斷frame是否可切入,可傳入locator元組或者直接傳入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it

以下條件判斷是否有alert出現
alert_is_present

以下條件判斷元素是否可點選,傳入locator
element_to_be_clickable

以下四個條件判斷元素是否被選中,第一個條件傳入WebElement對象,第二個傳入locator元組
第三個傳入WebElement對象以及狀态,相等傳回True,否則傳回False
第四個傳入locator以及狀态,相等傳回True,否則傳回False
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be

最後一個條件判斷一個元素是否仍在DOM中,傳入WebElement對象,可以判斷頁面是否重新整理了
staleness_of           

4、更改代碼等待方式

3個地方等待,輸入關鍵詞,點選按鈕,還有切換頁面。

輸入搜尋框,并确定。

wait=WebDriverWait(driver,10)
#等待定位元素值,并傳回元素值
input = wait.until(EC.presence_of_element_located((By.CLASS_NAME,'nav-search-input')))
#等待定位元素值,并等待是否可點選
button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'nav-search-btn')))           

調整頁面等待,By.CLASS_NAME定位一個class值,并不能很準确,是以這裡用By.CSS_SELECTOR定位。

對CSS_SELECTOR規則不熟的,直接檢視源代碼複制即可,當然也不一定非要最底層的元素值,我這裡到div.video.i_wrapper.search-all-list即可。

python爬蟲之selenium,浏覽器通路搜尋頁面提取,及隐藏浏覽器
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.video.i_wrapper.search-all-list')))           

最終代碼為:

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.bilibili.com/")

wait=WebDriverWait(driver,10)

#input = driver.find_element(By.CLASS_NAME,'nav-search-input')
#button = driver.find_element(By.CLASS_NAME,'nav-search-btn')
input = wait.until(EC.presence_of_element_located((By.CLASS_NAME,'nav-search-input')))
button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'nav-search-btn')))

input.send_keys('爬蟲')
button.click()

windows = driver.window_handles
driver.switch_to.window(windows[-1])
#time.sleep(5)

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.video.i_wrapper.search-all-list')))

html=driver.page_source

soup = BeautifulSoup(html,'lxml')
list = soup.find(class_='video-list row').find_all(class_="bili-video-card")

for item in list:
    #print(item)
    video_name = item.find(class_='bili-video-card__info--tit').text
    video_up = item.find(class_='bili-video-card__info--author').string
    video_date = item.find(class_='bili-video-card__info--date').string
    video_play = item.find(class_='bili-video-card__stats--item').text
    video_times = item.find(class_='bili-video-card__stats__duration').string
    video_link = item.find('a')['href'].replace('//','')
    print(video_name,video_up,video_play,video_times,video_link,video_date+'\n')
driver.quit()           

六、隐藏浏覽器無界面運作

如果長時間運作,不可能一直打開浏覽器,這時候就需要用無UI的浏覽器,或者隐藏浏覽器無界面運作。

方法一:PhantomJS浏覽器

PhantomJS一個基于webkit核心的無頭浏覽器,即沒有UI界面,即它就是一個浏覽器,隻是其内的點選、翻頁等人為相關操作需要程式設計實作。

注:最新版selenium(4.x.x)已經放棄PhantomJS,會報錯AttributeError: module ‘selenium.webdriver‘ has no attribute ‘PhantomJS‘

如需要用這種浏覽器,需要解除安裝最新的selenium,安裝3.8.0版本以下的。

pip uninstall selenium
pip install selenium==3.8.0           

phantomjs下載下傳位址:https://phantomjs.org/download.html,和安裝chrome驅動一緻,解壓,配置環境變量即可。

安裝完成後,在代碼種将webdriver.Chrome()改成webdriver.PhantomJS()即可。

#driver = webdriver.Chrome()
driver = webdriver.PhantomJS()           

方法二:配置options無頭模式

通過配置options的headless屬性。無頭模式有可能被檢測,容易被發現。

headless屬性來配置ChromeDriver以使用Selenium在無頭模式下啟動google-chrome浏覽器。然後将參數傳入webdriver.Chrome即可。

option = webdriver.ChromeOptions()
option.add_argument('--headless') # 設定option
driver = webdriver.Chrome(options=option)           

方法三:在虛拟顯示器上工作

推薦使用這種在伺服器上執行,這種方式,推薦是在Linux伺服器中進行。因為windows容易報錯,而且windows不支援某些包。

如報錯:ModuleNotFoundError: No module named 'fcntl',原因是fcntl包并不支援在window上面運作。

1:Linux安裝chrome和下載下傳chromedriver驅動

Linux安裝chrome

#下載下傳64位
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

#安裝
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt-get -f install           

安裝完成後,檢視chrome版本

ubuntu@ubuntu:~$ google-chrome --version 
Google Chrome 106.0.5249.119            

Linux下載下傳chromedriver驅動,根據chrome版本下載下傳在官網相應驅動版本。

#下載下傳
wget https://chromedriver.storage.googleapis.com/106.0.5249.61/chromedriver_linux64.zip
#解壓
unzip chromedriver_linux64.zip
#複制到/usr/bin/
sudo cp chromedriver /usr/bin/           

2:虛拟顯示器執行

使用虛拟桌面前,伺服器需要安裝xvfb支援虛拟桌面

sudo apt install xvfb           

安裝包pyvirtualdisplay

pip3 install pyvirtualdisplay           

倒入包名,開啟虛拟顯示器。

from pyvirtualdisplay import Display

display = Display(visible=0,size=(800,600))
display.start()
....
....

display.stop()           

或者用另一個包xvfbwrapper,也可以使用虛拟桌面。

安裝包

pip3 install xvfbwrapper           

導入

from xvfbwrapper import Xvfb

display = Xvfb(width=1280, height=740)
display.start()
....
....
display.stop()           

以上基本完成了。