【已解决】使用selenium启动谷歌Chrome浏览器打开指定网站,页面空白,而使用其它浏览器手动打开该网站则正常

news2025/1/16 11:10:32

问题描述

1、在使用python实现自动化网络爬虫时,我使用到selenium来驱动谷歌Chrome浏览器来打开某一个网页,然后爬取数据,代码如下:


from selenium import webdriver
import time


driver = webdriver.Chrome()
driver.get('https://klatasds.ecnu.edu.cn/xydt/list.htm')

time.sleep(5)
print(driver.page_source)

   2、但是当执行到driver.get(url)访问网站时,页面是空白的,如下所示,没有正常显示该网站的数据

   print输出的网页html也只有如下数据:

<html><head></head><body></body></html>

 3、而我将该url网址收到复制到其他浏览器中访问是正常的,可以看到网页数据,说明这个网址是没有问题的。


 原因分析:

      既然手动复制到其他浏览器可以正常访问,排除网址和网络的问题,手动另起一个Chrome浏览器,复制访问该网站还是OK的,而且换成访问百度首页,也是可以的,说明不是Chromedriver和浏览器版本的问题。

    因此,应该是该网站被反爬了,这个反爬是监测到我们使用了selenium自动化浏览器后就不返回数据在浏览器中显示。

     我们在使用selenium打开浏览器后,会看到一行文字:显示浏览器正收到自动化软件的控制:

selenium启动的浏览器与手动打开的浏览器的浏览器指纹是不一样的,所以能够被网站检测到。

而浏览器指纹,大家比较熟悉就是window.navigator.webdriver属性,如果是在selenium打开的浏览器,其结果为true,而正常浏览器结果为undefined。我们可以复制这个值到浏览器中试试:

打开一个普通的浏览器,F12,控制台,输入window.navigator.webdriver

 由selenium打开一个浏览器,F12,控制台,输入window.navigator.webdriver

  当然,浏览器的指纹不止这一个属性,还有其他的属性。网站监测是否是selenium启动的判断方法具体根据哪些浏览器指纹判断的不得而知。


 解决方案:

1、修改window.navigator.webdriver属性值,让其返回值为undefined

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
            "source": """
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
            """
        })
driver.get('https://klatasds.ecnu.edu.cn/xydt/list.htm')

2、如果上述方法不行,使用undetected_chromedriver库

    (1)pip install undetected_chromedriver  

    如果安装找不到,使用-i 参数更换pip安装源试试

   (2)修改代码

             

import undetected_chromedriver as wd
import time
driver = wd.Chrome()
driver.get('https://klatasds.ecnu.edu.cn/xydt/list.htm')

time.sleep(5)

        要注意使用undetected_chromedriver  ,Chrome浏览器必须更新到最新的版本,否则会报错。

     我最后是使用第2中方法成功解决了我的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于JavaSpringBoot+Vue+uniapp实现微信小程序新闻资讯平台

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

多模态大模型时代下的文档图像智能分析与处理

多模态大模型时代下的文档图像智能分析与处理 0. 前言1. 人工智能发展历程1.1 传统机器学习1.2 深度学习1.3 多模态大模型时代 2. CCIG 文档图像智能分析与处理论坛2.1 文档图像智能分析与处理的重要性和挑战2.2 文档图像智能分析与处理高峰论坛2.3 走进合合信息 3. 文档图像智…

<SQL>《SQL命令(含例句)精心整理版(2)》

《SQL命令&#xff08;含例句&#xff09;精心整理版&#xff08;2&#xff09;》 跳转《SQL命令&#xff08;含例句&#xff09;精心整理版&#xff08;1&#xff09;8 函数8.1 文本处理函数8.2 数值处理函数8.3 时间处理函数8.3.1 时间戳转化为自定义格式from_unixtime8.3.2 …

案例17:Java代驾管理系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

类的加载过程

一、前言   类加载器的技术 二、类的加载过程 2.1 JVM将类加载过程分为三个步骤&#xff1a;装载&#xff08;Load&#xff09;&#xff0c;链接&#xff08;Link&#xff09;和初始化(Initialize)。链接又分为三个步骤&#xff0c;如下图所示&#xff1a; 装载&#xff1a;…

linux命名管道总结

FIFO&#xff0c;也称为命名管道&#xff0c;它是一种文件类型。 1、特点 (1)FIFO可以在无关的进程之间交换数据&#xff0c;与无名管道不同。 (2)FIFO有路径名与之相关联&#xff0c;它以一种特殊设备文件形式存在于文件系统中。 2、原型 (1)#include <sys/types.h> #in…

一篇文章告诉你什么是Java内存模型

在上篇 并发编程Bug起源:可见性、有序性和原子性问题&#xff0c;介绍了操作系统为了提示运行速度&#xff0c;做了各种优化&#xff0c;同时也带来数据的并发问题&#xff0c; 定义 在单线程系统中&#xff0c;代码按照顺序从上往下顺序执行&#xff0c;执行不会出现问题。比…

一图看懂 click 模块:一个通过组合的方式来创建精美命令行界面的包,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 click 模块&#xff1a;一个通过组合的方式来创建精美命令行界面的包&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图&#…

Python篇——数据结构与算法(第一部分)

目录 一、查找 1、顺序查找&#xff1a;也叫线性查找&#xff0c;从列表第一个元素开始&#xff0c;顺序进行搜索&#xff0c;直到找到元素或搜索到列表最后一个元素为止。 2、二分查找&#xff1a;也叫折半查找&#xff0c;从有序列表的初始候选区li[0:n]开始&#xff0c;通…

【远程访问】Linux搭建SVN服务器,并内网穿透实现公网远程访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

C++入门预备语法

C入门预备语法 C关键字命名空间C输入&输出初步缺省参数函数重载引用内联函数auto和范围for&#xff08;C11&#xff09;指针空值nullptr C关键字 命名空间 命名空间是一种将变量名、函数名、类名和库名称等封装到一个命名空间域中&#xff0c;与其他域的同名量相隔离&…

【AUTOSAR】【以太网】SomeIpTp

目录 一、概述 二、限制与约束 三、功能说明 3.1 SOME/IP帧头 3.1.1 消息类型字段 3.1.2 偏移字段 3.1.3 更多段标志 3.1.4 示例 3.2 错误分类 3.2.1 开发错误 3.2.2 运行错误 四、API接口 4.1 API定义 4.2 回调接口 4.3 调度接口 一、概述 规范规定了AUTOSAR 基…

知识付费:创客匠人的发展转型之路

互联网时代到来后&#xff0c;知识付费行业以极快的速度崛起&#xff0c;让最早入局的人赚得盆满钵满&#xff0c;同时&#xff0c;也有很多人想进入行业发展&#xff0c;却没有真正打造好自己的平台&#xff0c;无法形成系统成熟的企业。如今&#xff0c;行业发展趋势还在不断…

案例19:Java私房菜定制上门服务系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

小型双轮差速底盘实现红外避障功能

1. 功能说明 在R023e机器人车体上安装1个近红外传感器&#xff0c;实现机器人小车避障功能。 2. 电子硬件 在这个示例中&#xff0c;我们采用了以下硬件&#xff0c;请大家参考&#xff1a; 主控板 Basra主控板&#xff08;兼容Arduino Uno&#xff09; 扩展板 Bigfish2.1扩展板…

VS2022 CUDA环境配置

文章目录 安装准备新建项目 安装准备 配置Cuda环境主要分为以下几个步骤 安装VS 这个应该不用太说&#xff0c;直接装最新版安装CUDA 下载地址&#xff1a;Cuda Toolkit安装cuDNN 下载地址&#xff1a;cuDNN archieve 这个安装顺序非常重要&#xff0c;一定是先装VS后装CUDA…

19 # promisify:将回调方法 promise 化

之前写个单独的方法去处理文件读取 function read(filename) {return new Promise((resolve, reject) > {fs.readFile(filename, "utf-8", function (err, data) {if (err) reject(err);resolve(data);});}); }将 node 的 api 快速的转化成 promise 的形式 cons…

Linux基于Apache服务搭建简易镜像站

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Linux基于Apache服务搭建简易镜像站 安装Apache服务器 yum install -y httpd.x86_64 配置Apache服务器&#xff1a;编辑Apache配置文件/etc/httpd/conf/httpd.conf #S…

深度学习 - 50.推荐场景下的 Attention And Multi-Head Attention

目录 一.引言 二.Attention 1.Common Attention 2.Google Attention 三.Multi-Head Attention 四.总结 一.引言 Attention 注意力机制最早来源于我们自身的视觉感官&#xff0c;当我们视觉获取到图像信息时&#xff0c;我们并不是从前往后从上往下均匀的扫描画面&#x…

如何用FinalShell连接VirtualBoxLinux虚拟机?

本章教程&#xff0c;主要介绍一下如何用FinalShell连接VirtualBoxLinux虚拟机。 当安装完虚拟机的时候&#xff0c;你可能会遇到找不到ifconfig命令。这个是因为当时安装过程中&#xff0c;我们选择的是最小化安装&#xff0c;所以有些命令是需要按需进行安装的。 目录 1、li…