再學爬蟲—selenium:
selenium是一個自動化測試工具,利用它可以驅動瀏覽器完成指定操作。
使用之前要聲明瀏覽器對象:
from selenium import webdriver
browser=webdriver.Chrome() #谷歌瀏覽器
browser=webdriver.Firefox() #火狐瀏覽器
browser=webdriver.Edge() #IE瀏覽器 版本更新好像沒用了
browser=webdriver.PhantomJS() #無頭瀏覽器
還有這種可以模擬瀏覽器操作且無界面:
chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
browser=webdriver.Chrome(chrome_options=chrome_options)
基本用法:
訪問頁面:
browser.get("url")
查找單個節點:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
......
返回的是一個WebElement對象
查找多個節點:
find_elements_by_id
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
......
其實就是在查找單個節點方法上加了一個s,但是返回的是一個列表。列表裏面還是WebElement對象。
節點交互:
輸入文字:
send_keys("輸入的文字")
清空文字:
clear()
點擊按鈕:
click()
還有很多,這裏就不一一列出了。
延時等待:
隱式等待:
如果selenium沒有在DOM中找到節點,將繼續等待,超出設定時間後,則拋出找不到節點的異常。也就是說,當查找節點而節點沒有立即出現的時候,隱式等待將等你帶一段時間再查找DOM,默認的時間是0。
browser.imlicitly_wait(10) #10秒
顯示等待:
如果在規定時間內加載出來了這個節點,就返回查找的節點;如果到了規定時間依然沒有加載出來該節點,則拋出超時異常。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait=WebDriverWait(browser,10) #10秒
input=wait.until(EC.presence_of_element_localed(By.ID,"q"))
以上是我在爬蟲過程中使用的比較多的。