Selenium能否生成网站真实流量?Python脚本无效求解决方法
如何用Selenium生成接近真实的网站流量
我之前也踩过这个坑——用Selenium写的脚本刚跑起来就被网站识别成机器人流量了。其实核心问题是Selenium默认的行为太“规整”,很容易被反爬机制盯上。下面分享几个我亲测有效的方案,附代码示例:
1. 隐藏Selenium的自动化特征
网站最常用的识别方式就是检查window.navigator.webdriver属性,默认情况下Selenium会把它设为true。我们要把这个属性改掉,同时禁用一些自动化相关的浏览器开关:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 禁用自动化扩展和提示 options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) # 先加一个示例UA,后面会讲随机化 options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") driver = webdriver.Chrome(options=options) # 修改webdriver属性,伪装成普通浏览器 driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
2. 模拟真实的用户交互节奏
真实用户不会瞬间完成点击,他们会有停顿、滚动、鼠标移动等行为。我们要加入随机等待、鼠标动作:
import time import random from selenium.webdriver.common.action_chains import ActionChains def random_wait(min_sec=2, max_sec=5): time.sleep(random.uniform(min_sec, max_sec)) # 打开页面后先随机滚动,模拟用户浏览 driver.get("https://your-target-site.com") random_wait() # 随机滚动到页面某个位置 driver.execute_script(f"window.scrollTo(0, {random.randint(100, 800)})") random_wait() # 模拟鼠标移动到链接上,停顿一下再点击 link = driver.find_element("xpath", "//a[contains(text(), '目标链接')]") ActionChains(driver).move_to_element(link).pause(random.uniform(0.5, 1.5)).click().perform() random_wait()
3. 使用随机化的用户代理
每次请求用不同的UA,模拟不同的设备和浏览器。可以维护一个UA列表,每次随机选一个:
user_agents = [ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15", "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Mobile/15E148 Safari/604.1", # 可以去网上找更多不同设备、浏览器的UA补充 ] # 每次启动浏览器随机选一个UA options.add_argument(f"user-agent={random.choice(user_agents)}")
4. 模拟真实的浏览路径
不要只循环点击链接,要模拟用户的真实流程:比如先看首页,点一个链接进去,停留一会儿,滚动页面,可能返回首页,再点另一个链接,甚至中途打开新标签页:
# 模拟完整的用户浏览流程 driver.get("https://your-target-site.com") random_wait(3, 6) # 随机选一个首页的链接 home_links = driver.find_elements("tag name", "a") if home_links: # 过滤掉无效链接(比如空href的) valid_links = [link for link in home_links if link.get_attribute("href") and "http" in link.get_attribute("href")] if valid_links: random_link = random.choice(valid_links) ActionChains(driver).move_to_element(random_link).pause(1).click().perform() random_wait(4, 8) # 滚动详情页到底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") random_wait(2, 4) # 返回首页 driver.back() random_wait(2, 3) # 再选另一个不同的链接 another_links = [link for link in valid_links if link != random_link] if another_links: another_link = random.choice(another_links) another_link.click() random_wait(3, 5)
5. 关键注意事项
- 不要过于频繁请求,控制请求频率,避免短时间内大量操作触发风控
- 严格遵守网站的
robots.txt和使用条款,滥用可能导致IP被永久封禁 - 如果需要大量模拟,可以配合高质量的代理IP使用,但要注意代理的纯净度,避免用被标记为爬虫的代理
最后提醒一下:即使做了这些优化,也不能100%保证完全和真实流量一样,但已经能大幅降低被识别的概率,让你的流量更接近真实用户行为。
内容的提问来源于stack exchange,提问作者Maha Waqar
相关产品推荐
相关产品推荐

