python萬字博文教你玩嗨selenium庫,建議收藏!
文章目錄
- python萬字博文教你玩嗨selenium庫,建議收藏!
- 首先安裝插件
- 基本用法
- 無界面模式運行,后臺運行
- 標簽定位方法
- 根據標簽的id屬性進行定位
- 根據標簽的name屬性進行定位
- 根據標簽的class屬性進行定位
- 根據xpath語法定位
- 根據CSS語法定位
- 瀏覽器頁面的關閉與退出
- 頁面的滑動
- 視窗切換
- 頁面的切換
- 強制等待
- 隱式等待
- 顯示等待
- 滑鼠懸停
- 使用代理
- 替換ua
- 模擬登陸與繼續請求
首先安裝插件
首先要安裝webdriver插件,本文以谷歌瀏覽器為例,點開谷歌瀏覽器,點擊右上角三個點,然后點擊幫助,然后點擊關于Google Chrome,查看瀏覽器的版本,然后點擊網址http://npm.taobao.org/mirrors/chromedriver尋找自己瀏覽器對應的版本進行下載,下載之后將chromedriver.exe的檔案最好放在你python解釋器的同級目錄下



基本用法
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r'你的chromedriver.exe的路徑')
start_url = 'https://www.baidu.com'
driver.get(start_url)
無界面模式運行,后臺運行
第一種無界面模式
from selenium import webdriver
from selenium.webdriver import ChromeOptions
# 創建配置物件
option = ChromeOptions()
# 無界面的設定
option.headless = True
driver = webdriver.Chrome(options=option)
driver.get('https://www.baidu.com')
# 獲取網頁的原始碼
html = driver.page_source
print(html)
無界面模式第二種
from selenium import webdriver
from selenium.webdriver import ChromeOptions
# 創建配置物件
option = ChromeOptions()
# 無界面的設定
option.add_argument('--headless')
driver = webdriver.Chrome(options=option)
driver.get('https://www.baidu.com')
# 獲取網頁的原始碼
html = driver.page_source
print(html)
第三種無界面模式
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path=r'你的phantomjs.exe路徑')
# driver = webdriver.phantomjs(executable_path=r'D:\python3.7\utils\phantomjs.exe')
driver.get('https://www.baidu.com')
# 獲取網頁的原始碼
html = driver.page_source
print(html)
標簽定位方法
from selenium import webdriver
driver = webdriver.Chrome()
# 視窗最大化
driver.maximize_window()
start_url = 'https://www.baidu.com'
# start_yrl_1 = 'https://www.csdn.net'
# 訪問地址
driver.get(start_url)
根據標簽的id屬性進行定位
# 根據標簽的id屬性進行定位
"""根據標簽的id屬性進行定位,如果瀏覽器頁面展示的是輸入,采用send_keys(),如果是按鈕點擊的,使用click()"""
driver.find_element_by_id('kw').send_keys('美女')
driver.find_element_by_id('su').click()
根據標簽的name屬性進行定位
driver.find_element_by_name('wd').send_keys('迪麗熱巴')
根據標簽的class屬性進行定位
driver.find_element_by_class_name('s_ipt').send_keys('迪麗熱巴')
根據xpath語法定位
driver.find_element_by_xpath('//*[@id="su"]').click()
根據CSS語法定位
driver.find_element_by_css_selector('#su').click()
瀏覽器頁面的關閉與退出
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)
"""通過執行js代碼,打開瀏覽器視窗,訪問地址"""
js = 'window.open("{}")'.format(start_url_1)
driver.execute_script(js)
time.sleep(5)
# 瀏覽器視窗的關閉
driver.close()
# 退出瀏覽器
driver.quit()
頁面的滑動
from selenium import webdriver
import time
driver = webdriver.Chrome()
start_url = 'https://www.csdn.net'
driver.get(start_url)
time.sleep(5)
# 滑動固定距離
# js = 'scrollTo(0, 2000)'
# driver.execute_script(js)
for i in range(5):
js = f'scrollTo(0, {(i+1)*800})'
driver.execute_script(js)
time.sleep(1.5)
視窗切換
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)
"""通過執行js代碼,打開瀏覽器視窗,訪問地址"""
js = 'window.open("{}")'.format(start_url_1)
driver.execute_script(js)
time.sleep(5)
"""獲取瀏覽器所有視窗:注意點:視窗的切換是通過下標控制的"""
win = driver.window_handles
# 執行切換
driver.switch_to.window(win[1])
time.sleep(2)
driver.switch_to.window(win[0])
time.sleep(2)
driver.switch_to.window(win[1])
time.sleep(2)
driver.switch_to.window(win[0])
# 瀏覽器視窗的關閉
driver.close()
# 退出瀏覽器
driver.quit()
頁面的切換
from selenium import webdriver
driver = webdriver.Chrome()
start_url = 'https://mail.163.com/'
driver.get(start_url)
"""定位不成功,在有的情況是因為有頁面的嵌套導致的
在一個html原始碼中有多個html頁面,示例:一個html嵌套一個html
以上:又稱之為iframe的嵌套
"""
# 定位嵌套位置iframe
el_iframe = driver.find_elements_by_tag_name('iframe')
# 執行iframe的切換
driver.switch_to.frame(el_iframe[0])
# 標簽定位
driver.find_element_by_name('email').send_keys('郵箱賬號')
driver.find_element_by_name('password').send_keys('你的郵箱密碼')
driver.find_element_by_id('dologin').click()
強制等待
import time
time.sleep(3)
隱式等待
等待一個標簽需要6秒鐘進行渲染,設定等待時間為10s,我們的程式,在等待6秒鐘后,即可執行下一步
資料加載完成,立馬執行下一步
from selenium import webdriver
from selenium.webdriver import ChromeOptions
driver = webdriver.Chrome()
url = 'https://www.kuwo.cn/search/list?key=%E6%9E%97%E4%BF%8A%E6%9D%B0'
driver.get(url)
driver.implicitly_wait(10)
driver.find_element_by_xpath('//*[@id="__layout"]/div/div[2]/div/div[2]/div[2]/div[2]/div[1]/ul/li[1]/div[2]/a').click()
顯示等待
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.baidu.com')
# 通過文本名稱進行定位
# driver.find_element_by_link_text('人工智能').click()
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located((By.LINK_TEXT, '地圖'))).click()
"""
引數20表示最長等待20s
引數0.5表示0.5s檢查一次規定的標簽書否存在
EC.presence_of_all_elements_located((By.LINK_TEXT, '地圖')):通過文本內容定位標簽
每0.5s一次檢查,通過鏈接文本內容定位標簽是否存在,如果存在就向下繼續執行,如果不存在20s上限就報錯
"""
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.csdn.net')
# 通過文本名稱進行定位
driver.find_element_by_link_text('人工智能').click()
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="floor-nav_557"]/div/div/div[2]/ul/li[1]/a'))).click()
滑鼠懸停
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)
# 定位到需要懸停的標簽
move = driver.find_element_by_xpath('//*[@id="headerNav"]/li[1]/a/span')
# 懸停之后需要點擊的標簽
a = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div[3]/div[1]/a[2]')
# 懸停點擊執行
# 創建事件物件
actions = ActionChains(driver)
time.sleep(1)
# 記錄操作
actions.move_to_element(move)
time.sleep(1.5)
# 懸停的點擊
actions.click(a)
time.sleep(1)
# 開始執行事件
actions.perform()
使用代理
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://ip地址') # 代理IP:埠號
# ${chromedriver_path}: chromedriver驅動存放路徑
driver = webdriver.Chrome(options=options)
driver.get("https://dev.kdlapi.com/testproxy")
# 獲取頁面內容
print(driver.page_source)
# 延遲3秒后關閉當前視窗,如果是最后一個視窗則退出
time.sleep(3)
driver.close()
替換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驅動存放路徑
driver = webdriver.Chrome(options=options)
driver.get("https://www.baidu.com")
# 獲取頁面內容
print(driver.page_source)
# 延遲3秒后關閉當前視窗,如果是最后一個視窗則退出
time.sleep(3)
模擬登陸與繼續請求
cookie_list = [
'''cookie串列'''
]
import random
from requests_html import HTMLSession
session = HTMLSession()
for i in range(3):
url_1 = 'https://www.douban.com'
headers = {
'Cookie': random.choice(cookie_list),
'Host': 'www.douban.com',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'
}
response = session.get(url_1, headers=headers).html
print(response.xpath('//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]/text()'))
from selenium import webdriver
driver = webdriver.Chrome()
from requests_html import HTMLSession
session = HTMLSession()
driver.maximize_window()
start_url = 'https://www.douban.com'
import time
# 訪問
driver.get(start_url)
time.sleep(0.5)
iframe_div = driver.find_element_by_tag_name('iframe')
# 執行切換
driver.switch_to.frame(iframe_div)
# 定位點擊密碼登錄
driver.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]').click()
# 通過name屬性定位標簽,輸入賬號
driver.find_element_by_name('username').send_keys('賬號')
driver.find_element_by_id('password').send_keys('密碼')
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
time.sleep(5)
# 獲取登錄之后的cookie
cookie_list = driver.get_cookies()
# 轉化cookie
cookie_dict = {cook['name']: cook['value'] for cook in cookie_list}
print(cookie_dict)
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'
}
response = session.get(start_url, headers=headers, cookies=cookie_dict).html
print(response.xpath('//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]/text()'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/289874.html
標籤:python
上一篇:Python自帶的小demo
