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

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")')

 

 
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 当使用selenium静默模式爬虫时,可能会遇到错的情况。解决这个问题的方法有几种。首先,你可以尝试卸载原有的selenium库,然后下载3.141.0版本的selenium。你可以通过在命令提示符中输入"pip uninstall selenium"来卸载原有的selenium库,然后输入"pip install selenium==3.141.0"来下载3.141.0版本的selenium。\[1\]另外,你还可以尝试更新你的代码,将"from selenium.webdriver.common.by import By"引入到你的代码中,并将"driver.find_element_by_name('phone')"修改为"user_tag = driver.find_element(By.NAME,'phone')"。\[2\]此外,你还可以使用等待加载的方法来解决问题。你可以使用隐式等待、显示等待或循环等待来等待元素加载完成。\[3\]如果以上方法都无效,你可以尝试使用强制等待来解决问题。 #### 引用[.reference_title] - *1* *2* [爬虫selenium库的使用笔记——用selenium时,提示find. element. by_name()错](https://blog.csdn.net/Ray_yusheng/article/details/128058085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python中的selenium库做爬虫一些关于元素找不到的问题](https://blog.csdn.net/zkkkkkkkkkkkkk/article/details/127491957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值