[Python-Selenium] 入門總結+坑點陳列
這文章主要介紹了:
- 如何入門Selenium
- Selenium進階指南
- 坑點陳列
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")
如果不行的話,注意排除以下幾點:
- Chromedriver的放置路徑問題
- 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,然後來進行操作。
先這麼多。想到再更新....