日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 爬虫 selenium

發布時間:2023/12/18 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 爬虫 selenium 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Selenium 個人學習筆記


準備工作

一: 安裝Chrome瀏覽器

二: 根據你瀏覽器的版本號下載 ChromeDriver (筆者的版本號是 76.0.3809.100)

ChromeDriver下載地址

筆者的版本下載

三:環境變量配置

(windows下)直接將ChromDriver可執行文件復制到python的Script目錄下

四:驗證安裝

在cmd中直接執行 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.查找節點

  • 單個節點
from selenium import webdriver # 查找節點 browser = webdriver.Chrome() browser.get('https://www.taobao.com') input_first = browser.find_element_by_id('q') # input_first_1 = browser.find_element(By.ID, 'q')input_second = browser.find_element_by_css_selector('#q') input_third = browser.find_element_by_xpath('//*[@id="q"]') print(input_first, input_second, input_third, sep='\n') browser.close()
  • 獲取單個節點的方法
find_element_by_id() find_element_by_name() find_element_by_xpath() find_element_by_link_text() find_element_by_partial_link_text() find_element_by_tag_name() find_element_by_class_name() find_element_by_css_selector()find_element() #通用方法 需要傳入兩個參數 如: find_element_by_id == find_element(By.ID, id)
  • 多個節點
from selenium import webdriverbrowser = webdriver.Chrome() browser.get('https://www.taobao.com') lis = browser.find_elements_by_css_selector('.service-bd li') print(lis) browser.close()#在單節點的基礎上,element 加一個 s

5節點交互

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.執行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.獲取節點信息

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里面的節點的。這時需要使用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節點 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()方法會在網頁框架加載結束后結束執行,此時獲取 page_source,可能并不是瀏覽器完全加載完成的頁面,如果某些頁面有額外的Ajax請求,我們在網頁源碼中也不一定能成功獲取到,所以,這里需要延時等待一定時間,確保節點已經加載出來。

  • 隱式等待
    當查找節點而節點并沒有立即出現的時候,隱式等待將等待一段時間再查找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()
  • 顯示等待

指定要查找的節點,然后指定一個最長等待時間。如果規定時間內加載出來了該節點,返回查找的節點;反之,拋出超時異常。

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節點加載出來,傳入定位元組, 如(By.ID, 'p')
visibility_of_element_located節點可見,傳入定位元組
visibility_of可見,傳入節點對象
presence_of_all_elements_located所有節點加載出來
text_to_be_present_in_element某個節點文本包含某文字
text_to_be_present_in_element_value某個節點值包含某文字
frame_to_be_available_and_switch_to_it加載并切換
invisibility_of_element_located節點不可見
element_to_be_clickable節點可點擊
staleness_of判斷一個節點是否仍在DOM,可判斷網頁是否已經刷新
element_to_be_selected節點可選擇,傳節點對象
element_located_to_be_selected節點可選擇,傳入定位元組
element_selection_state_to_be傳入節點對象及狀態,相等返回True,否則返回False
element_located_selection_state_to_be傳入定位元組及狀態,相等返回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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。