1、问题情景
使用selenium + python爬取csdn博客,其中一个步骤为点击博客详情页面的各级目录的链接,但是当鼠标点击目录链接时,页面会弹出一个登录窗口,要求登录。
如果是真实用户访问的页面,用户只需要在弹窗外面的任意灰色区域点击一下,就可以关掉这个弹窗;但是使用selenium控制的鼠标去定位点相关元素或者点击时,则会报错,因为元素可以被定位,但是无法被点击。
以博客https://blog.csdn.net/spring292713/article/details/13996587为例,点击第一个目录链接后,就会弹出登录的页面窗口。
注意:这种窗口是页面弹窗,不属于windows弹窗,因此,网上很多博客介绍的使用 “driver.switch_to.alert”进入到警示弹窗、消息弹窗等方法都是没有用的,因为那些都属于window弹窗
出现这种情况时,如果这种弹窗没有关闭掉,弹窗后面的博客内容相关元素可以被定位,但是无法进行点击等操作,例如执行下面代码,从返回结果可以知道,元素可以被定位。
browser.find_element_by_css_selector('#articleContentId')# 返回
<selenium.webdriver.remote.webelement.WebElement (session="0b7b7c297facdb427d72501c2bfb201f", element="de701010-0f46-4060-b6a0-20cd1006f4fe")>
接着我们在寻找到相关元素后,执行click()点击操作,结果程序报错了,从错误信息来看,元素不能被点击。
browser.find_element_by_css_selector('#articleContentId').click()

返回结果:

ElementClickInterceptedException          Traceback (most recent call last)
<ipython-input-65-0ba451952723> in <module>()----> 1 browser.find_element_by_css_selector('#articleContentId').click()
因此,在出现登录弹窗的情形下,想要使用selenium执行鼠标点击等操作,需要先关闭弹窗。
2、解决办法
思路:通过分析控制台中的标签发现,弹窗的出现是由网页对应标签的style属性值来控制的(这一点可以通过手动关闭弹窗,对比该属性值前后差异进而发现),有弹窗时style属性值为“display: block;”而手动关闭后的属性值为”display: none;“,通过测试,发现将该属性值更改为”display: none;“,弹窗关闭了。所以,考虑通过使用js代码更改该属性值,并使用selenium中的execute_script()方法执行该js代码,进而达到关闭弹窗的效果。
出现弹窗后的网页标签及style属性值:
在上图中右下方的红色框框中更改属性值为”display: none;“后的效果:
然而,弹窗虽然关闭了,但是发现博客页面依然是灰色,依然无法进行鼠标操作,通过与上面相同的思路发现,页面的灰色显示,也是由网页标签的style属性控制的,通过相同得到方法,更改属性值即可(更改为:display: none;),下面展示更改属性值之后的效果:
更改后:
3、js代码及执行
js代码如下所示,其中login-mark为灰色显示标签的class属性,而login-box为弹窗标签的class属性。
$(".login-mark").css("display","none")
$(".login-box").css("display","none")
# 取消灰色显示
browser.execute_script('$(".login-mark").css("display","none")')# 关闭登录弹窗
browser.execute_script('$(".login-box").css("display","none")')

selenium爬虫笔记——csdn博客页面登录弹窗问题解决相关推荐

  1. python刷阅读_简单的37行python爬虫刷CSDN博客阅读数

    # -*- coding:utf-8 -*- # 利用爬虫刷CSDN博客阅读数 import requests from bs4 import BeautifulSoup # 解析源码 def Get ...

  2. 火狐扩展:CSDN 博客页面自动 “阅读全文”

    简介 实现 确定思路 编写扩展 链接 简介 经常浏览 CSDN 博客的朋友可能会发现,篇幅较长且皮肤为"大白"的 CSDN 博客并不会自动显示全部文章内容,而是必须由读者手动点击 ...

  3. csdn博客页面内任意自动跳转(附编写截图),自动目录,超链接跳转,MarkDown编辑器(默认编辑器)

    文章目录 1.跳转方式 1.1 使用自动目录跳转 1.2 使用超链接跳转 1.2.1 跳转站外网址 1.2.2 跳转本页面任意地方 1.3使用html方式跳转(只能实现预览页跳转,实际跳转会失败) 1 ...

  4. 用selenium爬取csdn博客文章,并用4种方法提取数据

    为了方便susu学习selenium,下面代码用selenium爬取博客文章的标题和时间,并用selenium自带的解析,etree,bs4,scrapy框架自带的selector等4种方式来解析网页 ...

  5. 使用selenium爬取csdn博客

    爬取的基本原理是:使用代码控制浏览器,让浏览器加载出页面后,把页面的源代码抓取下来 这篇博客的思路是: 基本环境搭建 核心代码与解释 工具类的代码与解释 一. 基本环境搭建 这里建议使用豆瓣源进行安装 ...

  6. CSDN博客微信登录竟然强制扫码关注登录(又来了)

    本文仅吐槽CSDN的强制关注登录机制,所以没有特意做什么排版. CSDN近日又开始了无耻的强制关注操作 进入登录页面 扫码结果 如题,最近用微信登录CSDN账号的时候,发现扫码出来不是微信的授权登录页 ...

  7. linux sipp 呼叫转移_开源VoIP/电话 - linux学习笔记 - CSDN博客

    开源VoIP/电话 By jirong on 大珠小珠 有关PBX应用和交互语音应答系统的方案数量众多. Digium发起的Asterisk是首批开源 VoIP项目之一,也是最早的VoIP PBX之一 ...

  8. CSDN博客如何转载

    在参考"如何快速转载CSDN中的博客"后,由于自己不懂html以及markdown相关知识,所以花了一些时间来弄明白怎么转载博客,以下为转载CSDN博客步骤和一些知识小笔记. 参考 ...

  9. 转载CSDN博客步骤

    在参考"如何快速转载CSDN中的博客"后,由于自己不懂html以及markdown相关知识,所以花了一些时间来弄明白怎么转载博客,以下为转载CSDN博客步骤和一些知识小笔记. 参考 ...

最新文章

  1. android记录登录状态
  2. CodeForces - 1330E Drazil Likes Heap(贪心)
  3. vue源码学习--vue源码学习入门
  4. linux优先级队列,Python3 线程优先级队列( Queue)
  5. mybatis:在springboot中的配置
  6. python综合实验报告_Python程序设计实验报告五:综合运用三种基本结构进行程序设计(综合性实验)...
  7. 【Java】Java字符串拼接的五种方法,哪种性能最好?
  8. 来字节一年多,我都经历了什么?
  9. Java 中如何实现保留两位小数 — DecimalFormat
  10. vue2.0click点击事件修饰符stop阻止单击事件冒泡prevent阻止默认事件
  11. Scratch之猫和老鼠
  12. 维宏控制卡win7 驱动_维宏控制系统驱动
  13. Tool-图片压缩-腾讯智图:腾讯智图
  14. 自定义id的几种思路分享以及税务单据编号实现
  15. 使用excel校验身份证号码是否正确
  16. BlueCoat ProxySG Attack Detection功能
  17. element-UI设置背景色和边框色
  18. 蚂蚁的愤怒之源(落日余晖)-终结篇
  19. 计算机维护系统Win8PE,Win8PE x86应急维护系统BIOS-MBR硬盘版
  20. cacheable更新_缓存刷新显示带有@cacheable注释的错误

热门文章

  1. 公网服务器系统重名,服务器 重名处理
  2. Java中的Collection集合
  3. 用python代码画太极图
  4. 鲁大师7月新机性能/流畅榜:骁龙8+正面对决天玑9000+,性能跑分突破123万!
  5. Tin工具测评:一键试用TYK API网关
  6. 蓝桥杯JAVA-番外篇之四舍五入(JAVA实现)
  7. B站6月榜单丨飞瓜数据UP主成长排行榜(哔哩哔哩平台)发布!
  8. 如何使用UltraISO将光盘中的内容提取为ISO镜像
  9. python-flask框架-mysql-月新增用户数、当月活跃用户数等的查询及返回数据的逻辑
  10. CocosCreator之KUOKUO趣味文章:小怪的诞生 1