python 爬虫 selenium
Selenium 個人學習筆記
準備工作
一: 安裝Chrome瀏覽器
二: 根據你瀏覽器的版本號下載 ChromeDriver (筆者的版本號是 76.0.3809.100)
ChromeDriver下載地址
筆者的版本下載
三:環(huán)境變量配置
(windows下)直接將ChromDriver可執(zhí)行文件復制到python的Script目錄下
四:驗證安裝
在cmd中直接執(zhí)行 chromedriver 命令
如圖
1.selenium基本使用
from selenium import webdriverbrowser = webdriver.Chrome() browser.get('https://www.baidu.com') input_ = browser.find_element_by_id('kw') input_.send_keys('Python') browser.close()2.聲名瀏覽器對象
from selenium import webdriverbrowser = webdriver.Chrome() browser = webdriver.Firefox() browser = webdriver.Edge() browser = webdriver.PhantomJS() browser = webdriver.Safari()3.訪問頁面
from selenium import webdriverbrowser = webdriver.Chrome() browser.get('https://www.taobao.com') print(browser.page_source) browser.close()4.查找節(jié)點
- 單個節(jié)點
- 獲取單個節(jié)點的方法
- 多個節(jié)點
5節(jié)點交互
from selenium import webdriver import timebrowser = webdriver.Chrome() browser.get('https://www.taobao.com') input_ = browser.find_element_by_id('q') input_.send_keys('跳蛛') #輸入文字 time.sleep(1) input_.clear() # 清空文字 input_.send_keys('蜥蜴') button = browser.find_element_by_class_name('btn-search') button.click()6動作鏈
from selenium import webdriver from selenium.webdriver import ActionChainsbrowser = webdriver.Chrome() url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable' browser.get(url) browser.switch_to.frame('iframeResult') source = browser.find_element_by_css_selector('#draggable') target = browser.find_element_by_css_selector('#droppable') actions = ActionChains(browser) actions.drag_and_drop(source, target) actions.perform()7.執(zhí)行JavaScript
from selenium import webdriverbrowser = webdriver.Chrome() browser.get('https://www.zhihu.com/explore') browser.execute_script('window.scrollTo(0, document.body.scrollHeight)') browser.execute_script('alert("To Bottom")')*8.獲取節(jié)點信息
from selenium import webdriver#獲取屬性 browser = webdriver.Chrome() browser.get('https://www.baidu.com') logo = browser.find_element_by_id('su') print(logo) print(logo.get_attribute('class'))# 獲取文本值 browser = webdriver.Chrome() url = 'https://www.baidu.com' browser.get(url) input_ = browser.find_element_by_class_name('mnav') print(input_.text)# 獲取id、位置、標簽名和大小from selenium import webdriverbrowser = webdriver.Chrome() url= 'https://www.zhihu.com/explore' browser.get(url) input_ = browser.find_element_by_xpath('//*[@id="Popover1-toggle"]') print(input_.tag_name) print(input_.location) print(input_.size) print(input_.id) print(input_.__class__)9.切換Frame
Selenium打開頁面后,默認是在父級Frame里面操作的,而此時如果頁面中還有子Frame,是不能夠獲取到子Frame里面的節(jié)點的。這時需要使用Switch_to_frame()方法
ex:
from selenium import webdriver from selenium.common.exceptions import NoSuchElementExceptionbrowser = webdriver.Chrome() url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable' browser.get(url) browser.switch_to.frame('iframeResult') # 切換到子Frame try:logo = browser.find_element_by_class_name('logo') # 嘗試獲取Frame里的logo節(jié)點 except NoSuchElementException:print('NO LOGO') browser.switch_to.parent_frame() logo = browser.find_element_by_class_name('logo') print(logo) print(logo.text)10.延時等待
get()方法會在網頁框架加載結束后結束執(zhí)行,此時獲取 page_source,可能并不是瀏覽器完全加載完成的頁面,如果某些頁面有額外的Ajax請求,我們在網頁源碼中也不一定能成功獲取到,所以,這里需要延時等待一定時間,確保節(jié)點已經加載出來。
- 隱式等待
當查找節(jié)點而節(jié)點并沒有立即出現的時候,隱式等待將等待一段時間再查找DOM,默認時間是0
ex:
from selenium import webdriverbrowser = webdriver.Chrome() browser.implicitly_wait(10) # 隱式等待 url = 'https://pixabay.com/zh/images/search/%E8%B7%B3%E8%9B%9B/' browser.get(url) browser.close()- 顯示等待
指定要查找的節(jié)點,然后指定一個最長等待時間。如果規(guī)定時間內加載出來了該節(jié)點,返回查找的節(jié)點;反之,拋出超時異常。
ex:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECbrowser = webdriver.Chrome() url = 'https://www.taobao.com' browser.get(url) wait = WebDriverWait(browser, 10) # 顯式等待 input_ = wait.until(EC.presence_of_element_located((By.ID, 'q'))) # 等待條件 botton_ = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search'))) print(input_, botton_, sep='\n')- 等待條件極其含義
| title_is | 標題是某內容 |
| title_contains | 標題包含某內容 |
| presence_of_element_located | 節(jié)點加載出來,傳入定位元組, 如(By.ID, 'p') |
| visibility_of_element_located | 節(jié)點可見,傳入定位元組 |
| visibility_of | 可見,傳入節(jié)點對象 |
| presence_of_all_elements_located | 所有節(jié)點加載出來 |
| text_to_be_present_in_element | 某個節(jié)點文本包含某文字 |
| text_to_be_present_in_element_value | 某個節(jié)點值包含某文字 |
| frame_to_be_available_and_switch_to_it | 加載并切換 |
| invisibility_of_element_located | 節(jié)點不可見 |
| element_to_be_clickable | 節(jié)點可點擊 |
| staleness_of | 判斷一個節(jié)點是否仍在DOM,可判斷網頁是否已經刷新 |
| element_to_be_selected | 節(jié)點可選擇,傳節(jié)點對象 |
| element_located_to_be_selected | 節(jié)點可選擇,傳入定位元組 |
| element_selection_state_to_be | 傳入節(jié)點對象及狀態(tài),相等返回True,否則返回False |
| element_located_selection_state_to_be | 傳入定位元組及狀態(tài),相等返回True,否則返回False |
| alert_is_present | 是否出現警告 |
11.前進和后退
import time from selenium import webdriverbrowser = webdriver.Chrome() browser.get('https://www.baidu.com') browser.get('https://www.taobao.com') browser.get('https://www.python.org') browser.back() # 后退 time.sleep(1) browser.forward() # 前進 browser.close()12.Cookies
from selenium import webdriverbrowser = webdriver.Chrome() browser.get('https://www.zhihu.com/explore') print(browser.get_cookies()) browser.add_cookie({'name': 'duoban', 'domain': 'www.zhihu.com', 'value': 'germey'}) print(browser.get_cookies()) browser.delete_all_cookies() print(browser.get_cookies())13.選項卡管理
import time from selenium import webdriverbrowser = webdriver.Chrome() browser.get('https://baidu.com') browser.execute_script('window.open()') print(browser.window_handles) # 獲取當前開啟的所有選項卡 browser.switch_to.window(browser.window_handles[1]) # 參數為 選項卡代號 browser.get('https://mail.qq.com') time.sleep(1) browser.switch_to.window(browser.window_handles[0]) browser.get('https://translate.google.cn/')14異常處理
from selenium import webdriver from selenium.common.exceptions import TimeoutException, NoSuchElementExceptionbrowser = webdriver.Chrome() try:browser.get('https://www.baidu.com') except TimeoutException:print('Time out') try:browser.find_element_by_id('help') except NoSuchElementException:print('No Element') finally:browser.close()轉載于:https://www.cnblogs.com/duoban/p/11366570.html
總結
以上是生活随笔為你收集整理的python 爬虫 selenium的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生活规则
- 下一篇: 百度之星2019 初赛一 题解