21-selenium之options模块

本文介绍如何通过Selenium进行浏览器的高级配置,包括加载用户配置文件、设置编码、添加请求头等,以应对复杂的自动化测试需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

             前言

 加载用户配置文件

 设置编码

 添加请求头

  禁止加载图片

  无界面运行

  设置开发者模式启动

  禁用浏览器弹窗

  禁用JavaScript

  隐藏滚动条

  以最高权限运行

  添加插件

  添加代理

  debug模式


前言

    做自动化测试过程中,有时需要绕过验证码或如下场景中都可以使用该模块

  • 禁止图片和视频的加载:提升网页加载速度。
  • 使用请求头:访问移动端的站点,一般这种站点的反爬技术比较薄弱。
  • 添加扩展:像正常使用浏览器一样的功能。
  • 设置编码:应对中文站,防止乱码。
  • 添加代理:用于翻墙访问某些页面,或者应对IP访问频率限制的反爬技术。

 加载用户配置文件

    说明:此方法加载用户的配置文件,可绕过已登录的网站的登录页面

  • 在Chrome地址栏输入chrome://version/,查看自己的“个人资料路径
  • 注意:1)路径到User  Data ,不要后面的Default    2)关闭所有的Chrome进程(必须关闭在运行的浏览器)

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 设置成用户自己的数据目录
options.add_argument(r'--user-data-dir=C:\Users\<user>\AppData\Local\Google\Chrome\User Data')  

url = 'https://blog.youkuaiyun.com/IT_heima'
driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(5)
driver.quit()

 设置编码

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 设置中文编码格式
options.add_argument('lang=zh_CN.UTF-8')
driver = webdriver.Chrome(options=options)

driver.get('https://blog.youkuaiyun.com/IT_heima')
time.sleep(5)
driver.quit()

 添加请求头

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 浏览器
options.add_argument(
    'user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"')
driver = webdriver.Chrome(options=options)

driver.get('https://blog.youkuaiyun.com/IT_heima')
time.sleep(5)
driver.quit()

  禁止加载图片

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 禁止加载图片
options.add_argument('blink-settings=imagesEnabled=false')
driver = webdriver.Chrome(options=options)
driver.get('https://blog.youkuaiyun.com/IT_heima')
time.sleep(5)
driver.quit()

  无界面运行

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 浏览器不提供可视化页面运行
options.add_argument('--headless')

url = 'https://blog.youkuaiyun.com/IT_heima'
driver = webdriver.Chrome(options=options)
driver.get(url)
# 打印title,来确定是否运行
print(driver.title)
driver.quit()

  设置开发者模式启动

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 设置开发者模式,一般反爬比较好的网址都会根据这个反爬
options.add_experimental_option('excludeSwitches', ['enable-automation'])

url = 'https://blog.youkuaiyun.com/IT_heima'
driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(5)
driver.quit()

  禁用浏览器弹窗

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 禁用浏览器弹窗
prefs = {
    'profile.default_content_setting_values': {
        'notifications': 2
    }}
options.add_experimental_option('prefs', prefs)

url = 'https://blog.youkuaiyun.com/IT_heima'
driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(5)
driver.quit()

  禁用JavaScript

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 禁用JavaScript
options.add_argument("--disable-javascript")

url = 'https://blog.youkuaiyun.com/IT_heima'
driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(5)
driver.quit()

  隐藏滚动条

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 隐藏滚动条
options.add_argument('--hide-scrollbars')

url = 'https://blog.youkuaiyun.com/IT_heima'
driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(5)
driver.quit()

# option.add_argument(r'--user-data-dir=C:\Users\wz100\AppData\Local\Google\Chrome\User Data')  # 设置成用户自己的数据目录
# driver = webdriver.Chrome(options=options)
# url = 'https://pan.baidu.com/disk/home?fr=ibaidu#/all?path=%2F&vmode=list'

  以最高权限运行

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 以最高权限运行
options.add_argument('--no-sandbox')

url = 'https://blog.youkuaiyun.com/IT_heima'
driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(5)
driver.quit()

  添加插件

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 添加插件
extension_path = '你想要加载的插件路径'
options.add_extension(extension_path)

url = 'https://blog.youkuaiyun.com/IT_heima'
driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(5)
driver.quit()

  添加代理

# -*- coding: utf-8 -*-
# @Time    : 2021/3/4
# @Author  : 大海

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

PROXY = "proxy_host:proxy:port"
options = Options()
desired_capabilities = options.to_capabilities()
desired_capabilities['proxy'] = {
    "httpProxy": PROXY,
    "ftpProxy": PROXY,
    "sslProxy": PROXY,
    "noProxy": None,
    "proxyType": "MANUAL",
    "class": "org.openqa.selenium.Proxy",
    "autodetect": False
}
driver = webdriver.Chrome(desired_capabilities = desired_capabilities)

  debug模式

  • 启动浏览器dbug模式时,需要把其他的已打开浏览器的进程先全部关闭
  • 9222是默认端口,可以随意修改。但别使用已经被占用的端口
# -*- coding: utf-8 -*-
# @Time    : 2021/3/6
# @Author  : 大海
 
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
 
# 前面打开的浏览器,手动打开百度首页
# 下面的代码是在搜索框输入内容
 
options = Options()
options.debugger_address = "127.0.0.1:9222"
driver = webdriver.Chrome(options=options)

driver.find_element_by_id('kw').send_keys('测试一下')
driver.quite()
 

 

 

 

### 使用 Selenium 模块爬取携程网江苏景点信息 以下是使用 Selenium 模块增强功能以解决动态加载问题,并完整爬取携程网江苏景点的地址、评分、评论、开放时间、门票价格、景区特色和景区级别的方法。 --- #### 1. 安装依赖库 确保安装以下 Python 库: ```bash pip install selenium pandas matplotlib ``` 同时,下载与浏览器版本匹配的 ChromeDriver 并配置到系统路径中[^1]。 --- #### 2. 初始化 Selenium 驱动程序 通过 Selenium 模拟浏览器行为,访问携程网并提取所需数据。 ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options import time def initialize_driver(): chrome_options = Options() chrome_options.add_argument('--headless') # 无头模式运行浏览器 driver = webdriver.Chrome(options=chrome_options) return driver ``` --- #### 3. 数据抓取逻辑 模拟用户滚动页面以加载更多内容,并解析 HTML 提取所需信息。 ```python def fetch_data(driver, url): driver.get(url) time.sleep(3) # 等待页面加载完成 # 模拟滚动加载更多内容 scroll_pause_time = 2 last_height = driver.execute_script("return document.body.scrollHeight") while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(scroll_pause_time) new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: # 如果高度没有变化,则停止加载 break last_height = new_height # 获取页面源代码 page_source = driver.page_source return page_source ``` --- #### 4. 数据解析逻辑 使用 BeautifulSoup 解析 HTML,并提取景点的相关信息。 ```python from bs4 import BeautifulSoup def parse_data(page_source): soup = BeautifulSoup(page_source, 'html.parser') attractions = [] # 假设景点列表的类名为 .attraction-item attraction_items = soup.select('.attraction-item') for item in attraction_items: name = item.select_one('.attraction-name').text.strip() if item.select_one('.attraction-name') else "N/A" address = item.select_one('.attraction-address').text.strip() if item.select_one('.attraction-address') else "N/A" rating = item.select_one('.attraction-rating').text.strip() if item.select_one('.attraction-rating') else "N/A" comments = item.select_one('.attraction-comments').text.strip() if item.select_one('.attraction-comments') else "N/A" opening_time = item.select_one('.attraction-opening-time').text.strip() if item.select_one('.attraction-opening-time') else "N/A" ticket_price = item.select_one('.attraction-price').text.strip() if item.select_one('.attraction-price') else "N/A" features = item.select_one('.attraction-features').text.strip() if item.select_one('.attraction-features') else "N/A" level = item.select_one('.attraction-level').text.strip() if item.select_one('.attraction-level') else "N/A" attractions.append({ 'name': name, 'address': address, 'rating': rating, 'comments': comments, 'opening_time': opening_time, 'ticket_price': ticket_price, 'features': features, 'level': level }) return attractions ``` --- #### 5. 数据存储逻辑 将解析后的数据保存为 CSV 文件。 ```python import pandas as pd def save_to_csv(data, filename): df = pd.DataFrame(data) df.to_csv(filename, index=False, encoding='utf-8-sig') ``` --- #### 6. 主程序 整合以上模块,完成从数据抓取到存储的完整流程。 ```python if __name__ == "__main__": url = "https://www.ctrip.com/travel/jiangsu" # 携程网江苏景点页面 URL driver = initialize_driver() try: page_source = fetch_data(driver, url) data = parse_data(page_source) save_to_csv(data, 'jiangsu_attractions.csv') finally: driver.quit() ``` --- #### 7. 数据分析与可视化 对爬取的数据进行分析和可视化展示。 ```python import matplotlib.pyplot as plt def analyze_and_visualize(filename): df = pd.read_csv(filename) # 分析评分分布 plt.figure(figsize=(10, 6)) df['rating'].value_counts().plot(kind='bar') plt.title('Rating Distribution') plt.xlabel('Rating') plt.ylabel('Count') plt.show() # 分析门票价格分布 plt.figure(figsize=(10, 6)) df['ticket_price'].astype(float).plot(kind='hist', bins=20) plt.title('Ticket Price Distribution') plt.xlabel('Price') plt.ylabel('Frequency') plt.show() ``` 调用分析与可视化函数: ```python analyze_and_visualize('jiangsu_attractions.csv') ``` --- ### 注意事项 - 在爬取数据时需遵守目标网站的 `robots.txt` 规则[^2]。 - 如果页面内容通过 JavaScript 动态加载,Selenium 是一种有效的解决方案[^3]。 - 数据解析部分的 CSS 选择器需要根据实际网页结构调整。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习de测试小白

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值