最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你了解Python之Selenium自動(dòng)化爬蟲

 更新時(shí)間:2022年01月26日 15:46:08   作者:Harris-H  
這篇文章主要為大家詳細(xì)介紹了Python之Selenium自動(dòng)化爬蟲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

Python之Selenium自動(dòng)化爬蟲

0.介紹

Selenium是一個(gè)Web的自動(dòng)化測試工具,最初是為網(wǎng)站自動(dòng)化測試而開發(fā)的,Selenium 可以直接運(yùn)行在瀏覽器上,它支持所有主流的瀏覽器(包括PhantomJS這些無界面的瀏覽器(2018年開發(fā)者說暫停開發(fā),chromedriver也可以實(shí)現(xiàn)同樣的功能)),可以接收指令,讓瀏覽器自動(dòng)加載頁面,獲取需要的數(shù)據(jù),甚至頁面截屏。

1.安裝

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

2.下載瀏覽器驅(qū)動(dòng)

這里用的谷歌瀏覽器

http://npm.taobao.org/mirrors/chromedriver/

查看自己的瀏覽器版本下載對應(yīng)的驅(qū)動(dòng)。

在這里插入圖片描述

把解壓后的驅(qū)動(dòng)放在自己的python.exe 目錄下。

3.實(shí)例

我之前寫過3個(gè)實(shí)例

http://m.fzitv.net/article/236004.htm

4.開啟無頭模式

是否開啟無頭模式(即是否需要界面)

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
option = Options()  # 實(shí)例化option對象
option.add_argument("--headless")  # 給option對象添加無頭參數(shù)
option.headless = True #這種方式也可以
if __name__ == '__main__':
    web = Chrome(executable_path='D:\PyProject\spider\venv\Scripts\chromedriver.exe',options=option) # 指定驅(qū)動(dòng)位置,否則從python解釋器目錄下查找.
    web.get("https://baidu.com")
    print(web.title)

5.保存頁面截圖

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
option = Options()  # 實(shí)例化option對象
option.add_argument("--headless")  # 給option對象添加無頭參數(shù)
if __name__ == '__main__':
    web = Chrome()
    web.maximize_window()  # 瀏覽器窗口最大化
    web.get("https://baidu.com")
    print(web.title)
    web.save_screenshot('baidu.png')  # 保存當(dāng)前網(wǎng)頁的截圖  保存到當(dāng)前文件夾下
    web.close()  # 關(guān)閉當(dāng)前網(wǎng)頁

6.模擬輸入和點(diǎn)擊

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
option = Options()  # 實(shí)例化option對象
option.add_argument("--headless")  # 給option對象添加無頭參數(shù)
if __name__ == '__main__':
    web = Chrome()
    web.maximize_window()  # 瀏覽器窗口最大化
    web.get("https://baidu.com")
    el = web.find_element_by_id('kw')
    el.send_keys('Harris-H')
    btn = web.find_element_by_id('su')
    btn.click()
    # web.close()  # 關(guān)閉當(dāng)前網(wǎng)頁

貌似現(xiàn)在百度可以識別出selenium,還需要圖片驗(yàn)證。

a.根據(jù)文本值查找節(jié)點(diǎn)

# 找到文本值為百度一下的節(jié)點(diǎn)
driver.find_element_by_link_text("百度一下") 
# 根據(jù)鏈接包含的文本獲取元素列表,模糊匹配
driver.find_elements_by_partial_link_text("度一下") 

b.獲取當(dāng)前節(jié)點(diǎn)的文本

ele.text # 獲取當(dāng)前節(jié)點(diǎn)的文本
ele.get_attribute("data-click")  # 獲取到屬性對應(yīng)的value

c.打印當(dāng)前網(wǎng)頁的一些信息

print(driver.page_source)  # 打印網(wǎng)頁的源碼
print(driver.get_cookies())  # 打印出網(wǎng)頁的cookie
print(driver.current_url)  # 打印出當(dāng)前網(wǎng)頁的url

d.關(guān)閉瀏覽器

driver.close()  # 關(guān)閉當(dāng)前網(wǎng)頁
driver.quit()  # 直接關(guān)閉瀏覽器

e.模擬鼠標(biāo)滾動(dòng)

from selenium.webdriver import Chrome
import time
if __name__ == '__main__':
    driver = Chrome()
    driver.get(
        "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=78000241_12_hao_pg&wd=selenium%20js%E6%BB%91%E5%8A%A8&fenlei=256&rsv_pq=8215ec3a00127601&rsv_t=a763fm%2F7SHtPeSVYKeWnxKwKBisdp%2FBe8pVsIapxTsrlUnas7%2F7Hoo6FnDp6WsslfyiRc3iKxP2s&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=31&rsv_sug1=17&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=9266&rsv_sug4=9770")
    #  1.滾動(dòng)到網(wǎng)頁底部
    js = "document.documentElement.scrollTop=1000"
    # 執(zhí)行js
    driver.execute_script(js)
    time.sleep(2)
    # 滾動(dòng)到頂部
    js = "document.documentElement.scrollTop=0"
    driver.execute_script(js)  # 執(zhí)行js
    time.sleep(2)
    driver.close()

7.ChromeOptions

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://110.52.235.176:9999") # 添加代理
options.add_argument("--headless") # 無頭模式
options.add_argument("--lang=en-US") # 網(wǎng)頁顯示英語
prefs = {"profile.managed_default_content_settings.images": 2, 'permissions.default.stylesheet': 2} # 禁止渲染
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(executable_path="D:\ProgramApp\chromedriver\chromedriver73.exe",chrome_options=options)
driver.get("http://httpbin.org/ip")

8.驗(yàn)證滑塊移動(dòng)

"""
目標(biāo):滑動(dòng)驗(yàn)證碼
1.定位按鈕
2.按住滑塊
3.滑動(dòng)按鈕
"""
import time
from selenium import webdriver
if __name__ == '__main__':
    chrome_obj = webdriver.Chrome()
    chrome_obj.get('https://www.helloweba.net/demo/2017/unlock/')
    # 1.定位滑動(dòng)按鈕
    click_obj = chrome_obj.find_element_by_xpath('//div[@class="bar1 bar"]/div[@class="slide-to-unlock-handle"]')
    # 2.按住
    # 創(chuàng)建一個(gè)動(dòng)作鏈對象,參數(shù)就是瀏覽器對象
    action_obj = webdriver.ActionChains(chrome_obj)
    # 點(diǎn)擊并且按住,參數(shù)就是定位的按鈕
    action_obj.click_and_hold(click_obj)
    # 得到它的寬高
    size_ = click_obj.size
    width_ = 298 - size_['width']  # 滑框的寬度 減去 滑塊的 寬度 就是 向x軸移動(dòng)的距離(向右)
    print(width_)
    # 3.定位滑動(dòng)坐標(biāo)
    action_obj.move_by_offset(298-width_, 0).perform()
    # 4.松開滑動(dòng)
    action_obj.release()
    time.sleep(6)
    chrome_obj.quit()

9.打開多窗口和頁面切換

有時(shí)候窗口中有很多子tab頁面。這時(shí)候肯定是需要進(jìn)行切換的。selenium提供了一個(gè)叫做switch_to_window來進(jìn)行切換,具體切換到哪個(gè)頁面,可以從driver.window_handles中找到

from selenium import webdriver
if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com/")
    driver.implicitly_wait(2)
    driver.execute_script("window.open('https://www.douban.com/')")
    driver.switch_to.window(driver.window_handles[1])
    print(driver.page_source)

第二個(gè)實(shí)例

if __name__ == '__main__':
    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    start_url = 'https://www.baidu.com'
    start_url_1 = 'https://www.csdn.net'
    driver.get(start_url)
    time.sleep(5)
    """通過執(zhí)行js代碼,打開瀏覽器窗口,訪問地址"""
    js = 'window.open("{}")'.format(start_url_1)
    driver.execute_script(js)
    time.sleep(5)
    """獲取瀏覽器所有窗口:注意點(diǎn):窗口的切換是通過下標(biāo)控制的"""
    win = driver.window_handles
    # 執(zhí)行切換
    driver.switch_to.window(win[0])
    time.sleep(2)
    driver.switch_to.window(win[1])
    time.sleep(2)
    driver.switch_to.window(win[0])
    time.sleep(2)
    driver.switch_to.window(win[1])
    # 瀏覽器窗口的關(guān)閉
    driver.close()
    # 退出瀏覽器
    driver.quit()

有時(shí)候網(wǎng)頁會內(nèi)嵌另一個(gè)html。一般稱為iframe

from selenium import webdriver
driver = webdriver.Chrome()
start_url = 'https://mail.163.com/'
driver.get(start_url)
"""定位不成功,在有的情況是因?yàn)橛许撁娴那短讓?dǎo)致的
在一個(gè)html源碼中有多個(gè)html頁面,示例:一個(gè)html嵌套一個(gè)html
以上:又稱之為iframe的嵌套
"""
# 定位嵌套位置iframe
el_iframe = driver.find_elements_by_tag_name('iframe')
# 執(zhí)行iframe的切換
driver.switch_to.frame(el_iframe[0])
# 標(biāo)簽定位
driver.find_element_by_name('email').send_keys('郵箱賬號')
driver.find_element_by_name('password').send_keys('你的郵箱密碼')
driver.find_element_by_id('dologin').click()

10.Cookie操作

# 1.獲取所有的cookie:
for cookie in driver.get_cookies():
    print(cookie)
# 2.根據(jù)cookie的key獲取value:
value = driver.get_cookie(key)
# 3.刪除所有的cookie:
driver.delete_all_cookies()
# 4.刪除某個(gè)cookie:
driver.delete_cookie(key)
# 添加cookie:
driver.add_cookie({"name":"password","value":"111111"})

11.模擬登錄

這里模擬登錄我們學(xué)校教務(wù)處。

from selenium.webdriver import Chrome
if __name__ == '__main__':
    web = Chrome()
    web.get('http://bkjx.wust.edu.cn/')
    username = web.find_element_by_id('userAccount')
    username.send_keys('xxxxxxx') # 這里填自己的學(xué)號
    password = web.find_element_by_id('userPassword')
    password.send_keys('xxxxxxx') # 這里填自己的密碼
    btn = web.find_element_by_xpath('//*[@id="ul1"]/li[4]/button')
    btn.click()
    # do something

因?yàn)闆]有滑塊啥的驗(yàn)證,所以就很簡單qwq。然后后面進(jìn)行自己的操作即可。

12.使用代理

from selenium import webdriver
import time
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://ip地址')  # 代理IP:端口號
# ${chromedriver_path}: chromedriver驅(qū)動(dòng)存放路徑
driver = webdriver.Chrome(options=options)
driver.get("https://dev.kdlapi.com/testproxy")
# 獲取頁面內(nèi)容
print(driver.page_source)
# 延遲3秒后關(guān)閉當(dāng)前窗口,如果是最后一個(gè)窗口則退出
time.sleep(3)
driver.close()

14.更換UA

from selenium import webdriver
import time
agent = 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1'
options = webdriver.ChromeOptions()
options.add_argument('--user-agent=' + agent)
# ${chromedriver_path}: chromedriver驅(qū)動(dòng)存放路徑
driver = webdriver.Chrome(options=options)
driver.get("https://www.baidu.com")
# 獲取頁面內(nèi)容
print(driver.page_source)
# 延遲3秒后關(guān)閉當(dāng)前窗口,如果是最后一個(gè)窗口則退出
time.sleep(3)

15.鼠標(biāo)懸停

if __name__ == '__main__':
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    driver = webdriver.Chrome()
    import time
    start_url = 'https://lceda.cn/'
    driver.get(start_url)
    # 定位到需要懸停的標(biāo)簽
    move = driver.find_element_by_xpath('//*[@id="headerNav"]/li[1]/a/span')
    # //*[@id="headerNav"]/li[1]/a/span
    # 懸停之后需要點(diǎn)擊的標(biāo)簽
    a = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div[3]/div[1]/a[2]')
    # //*[@id="headerNav"]/li[1]/div/a[2]
    # /html/body/div[1]/div[2]/div[1]/div[1]/div[1]/div/div/div[1]/ul/li[1]/div/a[2]
    # 懸停點(diǎn)擊執(zhí)行
    # 創(chuàng)建事件對象
    actions = ActionChains(driver)
    time.sleep(1)
    # 記錄操作
    actions.move_to_element(move)
    time.sleep(1.5)
    # 懸停的點(diǎn)擊
    actions.click(a)
    time.sleep(1)
    # 開始執(zhí)行事件
    actions.perform()

16.優(yōu)缺點(diǎn)

selenium能夠執(zhí)行頁面上的js,對于js渲染的數(shù)據(jù)和模擬登陸處理起來非常容易。

selenium由于在獲取頁面的過程中會發(fā)送很多請求,所以效率非常低,所以在很多時(shí)候需要酌情使用。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!    

相關(guān)文章

  • pycharm運(yùn)行scrapy過程圖解

    pycharm運(yùn)行scrapy過程圖解

    這篇文章主要介紹了pycharm運(yùn)行scrapy過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python找出微信上刪除你好友的人腳本寫法

    Python找出微信上刪除你好友的人腳本寫法

    在本篇文章中我們給大家分享了Python找出微信上刪除你好友的人腳本寫法以及相關(guān)實(shí)例代碼,有需要的朋友們參考下。
    2018-11-11
  • python實(shí)現(xiàn)三階魔方還原的示例代碼

    python實(shí)現(xiàn)三階魔方還原的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)三階魔方還原的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python GUI編程(Tkinter) 創(chuàng)建子窗口及在窗口上用圖片繪圖實(shí)例

    python GUI編程(Tkinter) 創(chuàng)建子窗口及在窗口上用圖片繪圖實(shí)例

    這篇文章主要介紹了python GUI編程(Tkinter) 創(chuàng)建子窗口及在窗口上用圖片繪圖實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 2019 Python最新面試題及答案16道題

    2019 Python最新面試題及答案16道題

    這篇文章主要介紹了2019 Python最新面試題及答案16道題 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Python實(shí)現(xiàn)隨機(jī)生成算術(shù)題的示例代碼

    Python實(shí)現(xiàn)隨機(jī)生成算術(shù)題的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)隨機(jī)生成算術(shù)題的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • Python爬蟲學(xué)習(xí)之requests的使用教程

    Python爬蟲學(xué)習(xí)之requests的使用教程

    requests庫是一個(gè)常用的用于?http?請求的模塊,它使用?python?語言編寫,可以方便的對網(wǎng)頁進(jìn)行爬取。本文將通過示例詳細(xì)講講requests庫的使用,需要的可以參考一下
    2022-08-08
  • python 8種必備的gui庫

    python 8種必備的gui庫

    這篇文章主要介紹了python 8種必備的gui庫,幫助大家更好的進(jìn)行python 開發(fā),感興趣的朋友可以了解下
    2020-08-08
  • python?包中的sched?事件調(diào)度器的操作方法

    python?包中的sched?事件調(diào)度器的操作方法

    sched模塊內(nèi)容很簡單,只定義了一個(gè)類。它用來最為一個(gè)通用的事件調(diào)度模塊,接下來通過本文給大家介紹python?包之?sched?事件調(diào)度器教程,需要的朋友可以參考下
    2022-04-04
  • Python splitlines使用技巧

    Python splitlines使用技巧

    Python中的splitlines用來分割行。當(dāng)傳入的參數(shù)為True時(shí),表示保留換行符 \n。通過下面的例子就很明白了
    2008-09-09

最新評論

鄂尔多斯市| 大埔县| 永兴县| 普定县| 布拖县| 禹州市| 榆林市| 刚察县| 康保县| 四川省| 肥东县| 牡丹江市| 五大连池市| 资兴市| 玉山县| 峡江县| 浠水县| 敦化市| 皮山县| 进贤县| 定襄县| 株洲市| 皮山县| 新乐市| 新泰市| 西藏| 中超| 松溪县| 英山县| 三穗县| 宕昌县| 商河县| 修水县| 郯城县| 津市市| 历史| 公主岭市| 茌平县| 昌乐县| 马关县| 平昌县|