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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Selenium库详解

發布時間:2024/6/21 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 Selenium库详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自動化測試工具,支持多種瀏覽器,在爬蟲中主要用來解決JavaSript渲染的問題。 (驅動瀏覽器,發送一些指令,讓瀏覽器完成一些動作)

requests urllib這些庫無法正常獲取網頁內容時,這些網頁可能是后來javascript渲染過的,用selenium可以完成渲染,獲取到網頁渲染完后的源代碼,這樣就解決了javascript渲染的網頁無法獲取的問題

安裝:

pip3 install selenium

用法講解

基本使用

聲明瀏覽器對象:

from selenium import webdriver

browser = webdriver.Chrome()

browser =webdriver.Chrome()

browser =webdriver.Edge()

browser =webdriver.PhantomJS()

browser =webdriver.Safari()

訪問頁面:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('http://www.baidu.com')

print(browser.page_source)

browser.close()

查找元素:

(比如要找輸入框輸入信息,找到按鈕進行點擊)

查找單個元素

from selenium import webdriver


browser = webdriver.Chrome()
browser.get('http://www.taobao.com')

input_first = 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)
print(input_second)
print(input_third)

browser.close()
輸出結果為:
<selenium.webdriver.remote.webelement.WebElement (session="5c077333f76c85be9bb897e4104fd04e", element="0.7841876974650306-1")>
<selenium.webdriver.remote.webelement.WebElement (session="5c077333f76c85be9bb897e4104fd04e", element="0.7841876974650306-1")>
<selenium.webdriver.remote.webelement.WebElement (session="5c077333f76c85be9bb897e4104fd04e", element="0.7841876974650306-1")>

 運行結果為u<class 'selenium.webdriver.remote.webelement.WebElement'>類型,element有一個代號,input_first,input_second,input_third三個元素的代號相同,是完全等價的,也就是說找元素的方法是相同的,下面是一些常用的方法:

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

一種通用的查找方式:

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('http://www.taobao.com')
input_1 = browser.find_element(By.ID,'q')
print(input_1)
browser.close()
輸出結果為:
<selenium.webdriver.remote.webelement.WebElement (session="9b780326594b2b8e699bd3b6f4955141", element="0.44836792421187854-1")>

 查找多個元素:

把element改為elements

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('http://www.taobao.com')
input_1 = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')
print(input_1)
browser.close()

輸出結果為:
[<selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-1")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-2")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-3")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-4")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-5")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-6")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-7")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-8")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-9")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-10")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-11")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-12")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-13")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-14")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-15")>, <selenium.webdriver.remote.webelement.WebElement (session="270374ca380ccbd97758a1ee34663986", element="0.19502462209113514-16")>]

  結果為一個列表

查找單個元素與查找多個元素一樣,唯一的不同就是element改為elements

元素的交互操作:

對獲取的元素調用交互方法(比如對輸入框輸入文字,對按鈕進行點擊等)

from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q')
input.send_keys('小米8')
time.sleep(1)
input.clear()
input.send_keys('華為pro')
button = browser.find_element_by_class_name('btn-search tb-bg')
button.click()

  更多操作點擊這里

交互動作:

將動作附加到動作鏈(需要引入一個ActionChains)中串行執行

from selenium import webdriver
from selenium.webdriver import ActionChains

browser = 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()

 更多操作點擊這里 

執行JavaScript(一個比較萬能的方法)

在做一些元素交互動作的時候,可能有一些動作沒有提供api,比如進度條下拉,直接用api實現有難度,可以通過實行js來實現

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://www.taobao.com')
browser.execute_script('js語句')
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.taobao.com')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("down")')

 獲取元素信息

 獲取屬性

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.taobao.com')

ele1 = browser.find_element_by_class_name('btn-search')
print(ele1)
print(ele1.get_attribute('class'))

輸出結果為:
<selenium.webdriver.remote.webelement.WebElement (session="a11d0c26dd60c650a15f84340c85bef4", element="0.1796961286323151-1")>
btn-search tb-bg

 

獲取文本值

ele1.text

獲取ID,位置,標簽名,大小

ele1.id

ele1.location

ele1.tag_name

ele1.size

Frame

相當于獨立的網頁,在父級frame中查找子集frame中的元素,需要切換到子集中的frame,否則不能進行查找,同樣在子frame中也不能查找父frame

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

browser = webdriver.Chrome()
browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
print(source)
try:
    logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
    print('NO LOGO')
browser.switch_to.parent_frame()
logo = browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)  

等待

在做爬去的時候,可能有一些ajax請求,它不會管selenium(只加載一些基本的框架)是否加載完成,這樣操作的話可能會引發一些問題,所以需要加一些等待,確保元素加載完畢

隱式等待

當使用了隱式等待執行測試的時候,如果webdriver沒有在DOM中找到元素,將繼續等待,超出設定時間后拋出異常,也就是說當元素沒有立即顯現的時候,隱式等待將等待一段時間再查找DOM,默認的時間是0,在網速慢的情況下,可以加個等待

from selenium import webdriver
browser = webdriver.Chrome()
#設定隱式等待的時間
browser.implicitly_wait(10)
browser.get('http://www.baidu.com')  

顯式等待

指定一個等待條件,再指定一個最長等待時間

瀏覽器的前進后退

from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('http://www.baidu.com')
browser.get('http://www.taobao.com')
browser.get('http://www.python.org')
browser.back()
time.sleep(1)
browser.forward()
browser.close()

cookies

在爬去過程比較有用,尤其是在做一些登陸之后的爬去時

選項卡管理

最好的方法就是通過執行js命令window.open()來打開一個新的選項卡

browser.execute_script('window.open()')

異常處理

三樣東西有助于緩解生命的疲勞:希望、睡眠和微笑。---康德

總結

以上是生活随笔為你收集整理的Selenium库详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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