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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Selenium 与 PhantomJS

發布時間:2025/3/21 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Selenium 与 PhantomJS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1、selenium介紹
    • 2、selenium安裝
    • 3.selenium常用操作
    • 4.qq空間模擬登陸
    • 5、百度圖片抓取
    • 6、PhantomJS瀏覽器使用
    • 7、圖片懶加載

1、selenium介紹

介紹:
1.selenium是一個web自動化測試用的框架. 程序員可以通過代碼實現對瀏覽器的控制, 比如打開網頁, 點擊網頁中的元素, 實現鼠標滾動等操作.
2.它支持多款瀏覽器, 如谷歌瀏覽器, 火狐瀏覽器等等, 當然也支持無頭瀏覽器.
目的:
在爬取數據的過程中, 經常遇到動態數據加載, 一般動態數據加載有兩種, 一種通過ajax請求加載數據, 另一種通過js代碼加載動態數據. selenium可以模擬人操作真實瀏覽器, 獲取加載完成的頁面數據
ajax:
url有規律且未加密, 直接構建url連接請求
url加密過無法破解規律 --> selenium
js動態數據加載 --> selenium三要素: 瀏覽器, 驅動程序, selenium框架
瀏覽器: 推薦谷歌瀏覽器, 標準穩定版本
驅動程序:http://chromedriver.storage.googleapis.com/index.html
pip install selenium

2、selenium安裝

三要素: 瀏覽器, 驅動程序, selenium框架瀏覽器: 推薦谷歌瀏覽器, 標準穩定版本驅動程序:http://chromedriver.storage.googleapis.com/index.htmlpip install selenium# 測試: from selenium import webdriver browser = webdriver.Chrome('./chromedriver.exe') # 將驅動放在腳本所在的文件夾 browser.get('https://www.baidu.com')

3.selenium常用操作

# 實例化瀏覽器對象: from selenium import webdriver browser = webdriver.Chrome('driverpath')# 發送get請求: browser.get('https://www.baidu.com')# 獲取頁面元素: find_element_by_id:根據元素的id find_element_by_name:根據元素的name屬性 find_element_by_xpath:根據xpath表達式 find_element_by_class_name:根據class的值 find_element_by_css_selector:根據css選擇器# 節點交互操作: click(): 點擊 send_keys(): 輸入內容 clear(): 清空操作 execute_script(js): 執行指定的js代碼 # JS代碼: window.scrollTo(0, document.body.scrollHeight)可以模擬鼠標滾動一屏高度 quit(): 退出瀏覽器# 獲取網頁的數據: browser.page_source ---> str類型# frame switch_to.frame('frameid')

4.qq空間模擬登陸

from selenium import webdriver import time # 實例化瀏覽器對象 browser = webdriver.Chrome('./chromedriver.exe') # 打開qq空間登陸頁面 browser.get('https://qzone.qq.com/') time.sleep(1) # 轉至frame子頁面 browser.switch_to.frame('login_frame') # 獲取密碼登陸選項并點擊 a_tag = browser.find_element_by_id('switcher_plogin') a_tag.click() time.sleep(1) # 獲取賬號輸入框并輸入賬號 browser.find_element_by_id('u').clear() user = browser.find_element_by_id('u') user.send_keys('3338003899') time.sleep(1) # 獲取密碼輸入框并輸入密碼 browser.find_element_by_id('p').clear() pwd = browser.find_element_by_id('p') pwd.send_keys('qq123456') time.sleep(1) # 獲取登陸按鈕并單擊 button = browser.find_element_by_id('login_button') button.click()

5、百度圖片抓取

import time import requests from selenium import webdriver from bs4 import BeautifulSoup from urllib import request# 1.實例化瀏覽器對象 browser = webdriver.Chrome('./chromedriver.exe')# 2.向服務器發起請求 browser.get('http://image.baidu.com/') time.sleep(2)# 3.輸入關鍵字 input_tag = browser.find_element_by_id('kw') input_tag.send_keys('腰子姐') time.sleep(2)# 4.點擊搜索 button = browser.find_element_by_class_name('s_search') button.click() time.sleep(2)# 5.實現滾動下拉 for i in range(3):browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')time.sleep(3)text = browser.page_source# 6.實現數據解析 soup = BeautifulSoup(text, 'lxml')li_list = soup.select('.imgpage ul li')headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' }for li in li_list:href = li['data-objurl']# print(href)# request.urlretrieve(href, '%s.jpg'%li_list.index(li))res = requests.get(url=href, headers=headers)# res.text: 文本數據# res.json(): json數據# res.content: 二進制流with open('%s.jpg'%li_list.index(li), 'wb') as f:f.write(res.content)browser.quit()

6、PhantomJS瀏覽器使用

# PhantomJS下載及配置環境變量- 下載, 直接解壓- 將解壓文件的bin目錄添加至環境變量# PhantomJS無界面瀏覽器 from selenium import webdriver browser = webdriver.PhantomJS() browser.get('https://www.baidu.com') with open('baidu_phantomjs.html', 'w', encoding="utf-8") as f:f.write(browser.page_source) # 谷歌無頭瀏覽器 from selenium import webdriver from selenium.webdriver.chrome.options import Optionschrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') browser = webdriver.Chrome(chrome_options=chrome_options) browser.get("https://www.baidu.com") print(browser.page_source) with open('baidu_headerless.html', 'w', encoding='utf-8') as f:f.write(browser.page_source)

7、圖片懶加載

import requests from lxml import etree from urllib import request import urllib url = 'http://sc.chinaz.com/tupian/index.html' headers = {"USer-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' } res = requests.get(url=url, headers=headers) res.encoding = 'utf-8' # print(res.text) tree = etree.HTML(res.text)src_list = tree.xpath('//div[contains(@class,"box")]/div/a/img/@src2') for url_img in src_list:request.urlretrieve(url_img,'%s.jpg'%src_list.index(url_img)) from selenium import webdriver import timebrowser = webdriver.Chrome('./chromedriver.exe') browser.get('http://image.baidu.com/') search = browser.find_element_by_id('kw') search.send_keys('安琪拉') button = browser.find_element_by_class_name('s_search') button.click() for i in range(3):browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')time.sleep(5)text = browser.page_source with open('baidu_pic.html', 'w', encoding="utf-8") as f:f.write(text)from bs4 import BeautifulSoupsoup = BeautifulSoup(open('./baidu_pic.html', 'r', encoding='utf-8'), 'lxml') li_list = soup.select('.imgpage ul li') for url_img in li_list:url_img = url_img['data-objurl']print(url_img)

總結

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

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