1. 程式人生 > >[Python-Selenium] 入門總結+坑點陳列

[Python-Selenium] 入門總結+坑點陳列

這文章主要介紹了:

  1. 如何入門Selenium
  2. Selenium進階指南
  3. 坑點陳列

1. 如何入門Selenium

Selenium主要涉及動態網頁的爬取,一般都是結合F12,或者BeautifulSoup一起服用效果更佳。那麼最開始如何從0開始入門呢

當然從安裝做起啦。

pip install Selenium

Selenium支援多種瀏覽器,例如 i.e, firefox, chrome等。以下的例子都是以Chrome為例哦。

資源包好了後,搜尋 "chromedriver.exe" ,並下載下來,放在跟你的project/code相同的地方。

現在嘗試來跑下以下的程式碼:

from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")

如果不行的話,注意排除以下幾點:

  1. Chromedriver的放置路徑問題
  2. Chromedriver 版本與Chrome版本是否不相容呀。

2. 進階

那麼接下來,你還需要學會以下的東西才能達到你想要的效果呢:

  • 如何應用起自己預設登陸的功能
  • 元素定位(css, id, class, table) 這幾種定位方式
  • 驗證碼(數字,滑動條驗證)
  • 模擬滑鼠點選,新開tab等功能

大家都知道,有了cookies,瀏覽器在開啟頁面的時候會自動登陸的。當然啦,有些瀏覽器還是需要你自己去設定“記住密碼”,“自動提交表單”的功能。那麼Selenium怎麼把這個利用起來呢?對於Selenium來說,他可沒有這種”記憶“功能,每次get一個source的時候,都當是全新的頁面來操作的,這個時候我們要怎麼辦呢!就是利用Option,來新增使用者的資訊資料啦。

u = getpass.getuser()
# # initialize Chrome options
chrome_options = Options()

## Add the user information
chrome_options.add_argument('user-data-dir=C:\\Users\\%s\\AppData\\Local\\Google\\Chrome\\User Data' % (u))

## SF Case page
source = "https://detail.1688.com/offer/557053926640.html?spm=a2615.7691456.newlist.28.256458ffhDWnNr"
driver = webdriver.Chrome(chrome_options=chrome_options)

driver.get(source)

其他的一些講解,等我有空的時候再來整理以下啊哈。

接下來我們直接來到坑點大總結!

3. 坑點大總結

1) 定位元素

driver.find_element_by_id("xxx") 

driver.find_elements_by_id("xxx")

一開始我就被這個深深地傷害了呢,注意區分以上兩個:

find_element_by_id 一般結合"try...except..."。當找不到這個元素的時候,直接會丟擲一個NoSuchElementException的異常錯誤,那麼這時候你可以把這個應用起來執行其他的操作,例如以下:

try:
    driver.find_element_by_id("xxx")
except NoSuchElementException:
    print("Could not find it! Please check again!")

find_elements_by_id("xxx") 是會返回一個列表,如果找不到這個元素的話,那麼就會是假啦,這個時候一般是用以下:

if driver.find_elements_by_id("xxx"):
    xxxx
else:
    xxxxx

2) Option的應用

關於怎麼用Option,上面已經講過啦。但是要注意的是,對於Selenium的話,不能同時執行兩個相同的Option的哦。以下這種會在開啟第二個瀏覽器的時候報錯,顯示”Chrome crashed“ 的字樣。

h1="https://www.google.com"
h2="https://www.163.com"

u = getpass.getuser()
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
## Add the user information
chrome_options.add_argument('user-data-dir=C:\\Users\\%s\\AppData\\Local\\Google\\Chrome\\User Data' % (u))

d1= webdriver.Chrome(chrome_options=chrome_options)
d1.get(h1)

d2= webdriver.Chrome(chrome_options=chrome_options)
d2.get(h2)

那麼你想跑兩個Option的時候,應該怎麼辦?

3) 雜七雜八

如果你有很多個instance的話,建議是開啟多個瀏覽器,結合多執行緒來達到這個目的。

如果你想通過多標籤,結合多執行緒,這個是不行的哦。對於多標籤,Selenium只會針對當前的標籤頁來進行相應的操作,因此,你要先定位到你想要的網頁為當前window_tab,然後來進行操作。

先這麼多。想到再更新....