爬虫Selenium
时间: 2025-01-04 07:33:07 浏览: 8
### Selenium 爬虫使用教程
#### 初始化 WebDriver 实例
为了启动浏览器并创建一个会话,需要初始化 WebDriver 实例。对于不同类型的浏览器有不同的驱动程序可用。
```python
from selenium import webdriver
driver = webdriver.Chrome() # 启动Chrome浏览器
```
#### 访问网页
一旦有了 WebDriver 对象,就可以利用 `get` 方法访问指定 URL 页面:
```python
url = "http://example.com"
driver.get(url)
```
#### 处理元素交互
可以定位页面上的 HTML 元素并通过多种方式与其互动,比如点击按钮、填写表单字段等操作。
```python
element = driver.find_element_by_id('submit')
element.click()
```
注意:上述代码中的 `.find_element_by_*()` 已经在较新的版本中被弃用,推荐使用如下写法[^1]:
```python
from selenium.webdriver.common.by import By
element = driver.find_element(By.ID, 'submit')
element.click()
```
#### 切换窗口句柄
当有多个标签页或弹窗打开时,可以通过获取当前所有窗口的句柄列表来实现焦点转移。
```python
handles = driver.window_handles
for handle in handles:
driver.switch_to.window(handle)
```
#### 设置代理服务器
如果想要设置 HTTP 或 SOCKS 代理,则可以在启动参数里加入相应选项。
```python
chrome_options = webdriver.ChromeOptions()
proxy_option = '--proxy-server=ip_address:port'
chrome_options.add_argument(proxy_option)
driver = webdriver.Chrome(options=chrome_options)
```
#### 隐形模式 (无头浏览 Headless Mode)
有时不需要显示实际图形界面而只需执行脚本逻辑,在这种情况下可以选择启用隐形模式运行浏览器实例。
```python
options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome(options=options)
```
---
### 常见问题解决方案
#### 被目标站点识别为机器人行为
为了避免被检测到是自动化工具,建议采用 **Selenium-Stealth** 扩展库,它可以帮助隐藏某些特征使得更难于辨认是否由机器控制[^2].
安装命令:
```bash
pip install selenium-stealth
```
应用示例:
```python
import time
from selenium import webdriver
from selenium_stealth import stealth
options = webdriver.ChromeOptions()
# 添加隐身属性防止反爬机制工作
stealth(driver,
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
driver = webdriver.Chrome(options=options)
```
#### Edge 浏览器兼容性问题
针对 Microsoft Edge 浏览器可能出现的一些特定错误消息或者功能缺失情况,通常是因为缺少正确的配置文件路径或者是未更新至最新版驱动所致[^3].
确保已下载对应版本 edgeDriver 并放置于环境变量 PATH 中;另外还可以尝试调整 chromeOptions 参数以适应 edge 特有的需求:
```python
edge_options = webdriver.EdgeOptions()
edge_driver_path = r'C:\path\to\msedgedriver.exe'
driver = webdriver.Edge(executable_path=edge_driver_path,options=edge_options)
```
阅读全文