首页 > 其他分享 >使用Selenium时,如何模拟正常用户行为?

使用Selenium时,如何模拟正常用户行为?

时间:2024-10-24 16:17:09浏览次数:8  
标签:Selenium random driver 用户 element 模拟

在这里插入图片描述

Selenium作为自动化测试和网页数据抓取的利器,被广泛应用于自动化网页交互、爬虫开发等领域。然而,随着网站反爬虫技术的不断升级,简单的自动化脚本很容易被识别和阻止。因此,模拟正常用户行为,降低被检测的风险,成为Selenium使用者必须掌握的技能。本文将详细介绍如何使用Selenium模拟正常用户行为,并提供相应的代码实现过程。

模拟用户行为的重要性

在进行网页自动化操作时,如果行为模式与正常用户显著不同,很容易被网站的反爬虫机制识别。例如,正常用户在浏览网页时会有随机的停留时间、不规则的点击路径和自然的文字输入节奏。而自动化脚本往往表现出高频率的请求、固定的操作模式和缺乏人性化的交互行为。因此,模拟正常用户行为对于提高Selenium脚本的稳定性和成功率至关重要。

模拟用户行为的策略

1. 随机化请求间隔

正常用户在浏览网页时,操作之间会有随机的间隔。通过在操作之间添加随机延迟,可以模拟这种自然行为。

python

import time
import random

def random_sleep(min_seconds=1, max_seconds=3):
    time.sleep(random.uniform(min_seconds, max_seconds))

# 示例:在两个操作之间添加随机延迟
random_sleep()
driver.get('https://www.example.com')
random_sleep()
driver.find_element_by_id('some-button').click()

2. 使用随机的用户代理

用户代理(User-Agent)是浏览器标识自己的字符串,不同的浏览器和设备有不同的User-Agent。通过设置随机的User-Agent,可以使请求看起来来自不同的浏览器。

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

# 定义代理服务器的详细信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"

# 设置代理
proxy = Proxy({
    'proxyType': ProxyType.MANUAL,
    'httpProxy': f'{proxyHost}:{proxyPort}',
    'sslProxy': f'{proxyHost}:{proxyPort}',
    'ftpProxy': f'{proxyHost}:{proxyPort}',
    'noProxy': ''  # 指定不通过代理访问的地址,为空则无限制
})

# 设置代理认证信息(如果代理服务器需要)
proxy.add_to_capabilities({
    'proxyAuthConfig': {
        'username': proxyUser,
        'password': proxyPass
    }
})

# 设置用户代理
user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
    # 更多User-Agent字符串...
]

random_user_agent = random.choice(user_agents)
options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={random_user_agent}')

# 使用带有代理设置的ChromeDriver
driver = webdriver.Chrome(options=options, proxy=proxy)

3. 模拟鼠标移动和点击

使用Selenium的ActionChains类,可以模拟鼠标的移动和点击,增加操作的自然性。

python

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id('some-button')
action = ActionChains(driver)
action.move_to_element(element).click().perform()

4. 输入文本时的延迟

模拟真实用户输入文本时的速度和节奏,可以通过逐个字符输入并添加延迟。

python

def type_randomly(input_element, text):
    for char in text:
        input_element.send_keys(char)
        time.sleep(random.uniform(0.1, 0.5))  # 随机延迟模拟打字速度

input_field = driver.find_element_by_id('input-field-id')
type_randomly(input_field, 'Hello, World!')

5. 模拟滚动

模拟用户滚动页面的行为,可以使用JavaScript或Selenium的滚动功能。

python

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

6. 处理弹窗和提示

及时处理网页中的弹窗、提示框或验证码,模拟用户的交互。

python

try:
    alert = driver.switch_to.alert
    alert.accept()  # 接受弹窗
except:
    pass

7. 随机访问页面

随机选择访问的页面或元素,避免频繁访问同一页面。

python

pages = ["https://www.example1.com", "https://www.example2.com", "https://www.example3.com"]
driver.get(random.choice(pages))

8. 使用显式等待

使用显式等待,确保元素在可交互状态后再进行操作,模拟用户的耐心等待。

python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'some-button')))
element.click()

9. 模拟浏览器行为

通过设置浏览器窗口大小、分辨率等,模拟不同设备的访问。

python

driver.set_window_size(1024, 768)  # 设置窗口大小

结论

通过上述方法,我们可以有效地模拟正常用户的行为,降低Selenium脚本被网站反爬虫机制识别的风险。然而,需要注意的是,这些技术的使用应当遵守网站的服务条款,并且不应该用于任何非法或不道德的活动。在享受自动化带来的便利的同时,我们也应该尊重网站的规则和用户的隐私。通过合理、合法地使用Selenium,我们可以在遵守规则的前提下,有效地收集和分析网络数据,为决策提供支持

标签:Selenium,random,driver,用户,element,模拟
From: https://blog.csdn.net/Z_suger7/article/details/143212596

相关文章

  • PFC离散元数值模拟仿真技术与应用
    随着计算能力的提高和算法的优化,离散元仿真技术得到了快速发展,并在学术界产生了大量研究成果。在PFC离散元计算中无需给定材料的宏观本构关系和对应的参数,这些传统的参数和力学特性在程序中可以自动得到。据调查,运用PFC离散元仿真技术工具近几年发表的论文主要集中在以下几个方......
  • 【10-24模拟赛T1】Alice 和璀璨花
    著名的植物学家Alice经过多年的探索,终于找到了传说中的璀璨花。璀璨花的生长速度非常迅猛,如果不加以合适的控制,璀璨花会因为过度内耗而死亡。璀璨花的生长趋势可以用序列\(a\)表示,Alice在研读前人对璀璨花的研究后总结出了一个控制序列\(b\)。Alice需要让璀璨花的生长趋势......
  • VMware安装虚拟机时,全名、用户名、虚拟机名是什么。修改虚拟机为静态ip
    1.打开vmware新建虚拟机,选择iso光盘也就是linux操作系统光盘;否则vmware只是给你新建啦一个有内存+cpu+磁盘的物理机没有操作系统。2.分清楚概念:物理机名称、linux操作系统名称、linux里的用户名、linux里必须存在的root用户左边的“CentOS64位”就是物理机名称、“linux”就......
  • 将用户数据迁移到服务器机械硬盘
    目录:类型一:在服务器上已有数据,进行数据迁移类型二:在服务器上没有数据,需要使用U盘进行传输由于固态硬盘的内存相对较小,如果说用户的数据集过大,可能会出现磁盘爆满的情况,如果说服务器上装有机械硬盘,可以考虑将用户数据集移动到机械硬盘中去。 类型一:在服务器上已有数据,进行数......
  • SAP ABAP 系统都有哪些用户类型?
    在SAPABAP系统中,usertype是用户主数据的一部分,它决定了用户如何访问系统以及他们在系统中的权限和职责。usertype字段是指SAP系统中的用户账户类别,通过这个类别可以定义该用户如何使用系统资源,以及哪些操作对于特定用户是允许的或受限制的。具体来说,usertype帮......
  • 基于SpringBoot + Vue的智慧物业服务系统(角色:用户、巡检员、管理员)
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 2024/10/23 模拟赛总结
    赛时情况以下是赛时写的。14:10好像当\(n\lem\)时的答案是\(2^n\)。14:20当\(m=2\)时,答案的差值是一个等差数列。答案为\(\dfrac{n(n+1)}{2}+1\)。小样例:\(n=4,m=3\)答案为\(15\)。14:50T1不会啊,润。发现如果你会惹老师生气,干脆直接不写。所以变成了选若干科......
  • 苍穹外卖 用户端查询菜品分类接口
        CategoryControllerpackagecom.sky.controller.user;importcom.sky.entity.Category;importcom.sky.result.Result;importcom.sky.service.CategoryService;importio.swagger.annotations.Api;importio.swagger.annotations.ApiOperation;importlom......
  • 用户增长营销方向业务的前端系统设计与研发实战经验分享 All In One
    用户增长营销方向业务的前端系统设计与研发实战经验分享AllInOne用户增长/UserGrowth/UG用户增长是一套方法论用户生命周期AARRR模型Acquisition获取Activation激活Retention留存Revenue收入(变现Monetization)Referral推荐/引荐从上图可以看到,UG可......
  • Nginx配置auth_basic认证,让用户访问指定页面时输入用户名密码认证
    配置方法:[root@localhost~]#yum-yinstallhttpd-toolsLoadedplugins:fastestmirrorLoadingmirrorspeedsfromcachedhostfileResolvingDependencies-->Runningtransactioncheck--->Packagehttpd-tools.x86_640:2.4.6-99.el7.centos.1willbeinstall......