CSS选择器定位网页元素中的伪元素,以及使用隐式等待寻找广告的关闭按钮元素

1.当我们在检查网页弹窗关闭按钮时

 有时会发现定位的元素会出现如下图这样的::before伪元素方式出现:

   这时如果想通过XPath直接定位,是不行的。

  XPath是一种用于描述DOM结构的查询语言,它可以通过路径表达式定位和选择实际的DOM元素。然而,伪元素是通过CSS选择器生成的虚拟元素,并不在DOM结构中存在。因此,XPath无法直接选择和定位伪元素。

   此时我们要想定位和操作伪元素,可以考虑以下两种方法:

  1. 尝试操作生成伪元素样式的真实元素:有时伪元素的样式是应用在真实元素上的,你可以尝试操作这个真实元素来达到你的目的。

  2. 更改CSS选择器:如果伪元素的样式是通过CSS选择器应用在其他实际元素上的,你可以尝试修改CSS选择器来选中符合条件的实际元素。

 

 根据不同情况,这里我选中的就是伪元素上方的实际元素,再使用CSS_SELECTOR进行定位:

wd.find_element(By.CSS_SELECTOR, "[class=\"jsx-2320072050 iconfont icon-close\"]")

这样我们的成功选中我们需要的元素了。

2.第二种情况是未加载完成元素如何在其加载完成后,选中该元素

如下图的弹窗广告:

其右边的X和关闭都是伪装的关闭按钮。只有等其加载完毕之后,左上角真正的关闭按钮才会 出现:

 这时我们如果直接使用CSS_SELECTOR选择左上角关闭按钮的元素时,可能会直接抛出异常:

Unable to locate element: {"method":"css selector","selector":"[style="cursor: pointer; position: absolute; top: 0px; left: 0px; z-index: 2147483646; width: auto; height: auto;"]"}
  (Session info: chrome=114.0.5735.199)

 这是因为web.driver的遍历过程很快,如果找了一圈没有发现此元素的话会直接报错。所以我们可以通过selenium中的隐式等待方法(implicitly_wait),如下图:

wd.implicitly_wait(10)  # 设置隐式等待:如果找不到元素,每隔半秒钟去界面上查看一次,直到找到该元素进入下一步

  implicitly_wait方法是在创建webdriver.Chrome()实例后立即调用的。它设置一个全局的等待时间,用于查找元素时的等待操作。在隐式等待期间,WebDriver将等待给定的时间(在这里是10秒),在每次查找元素时都会进行尝试。如果在等待时间内找到了元素,WebDriver将立即执行下一步操作。如果等待时间耗尽仍然找不到元素,才会抛出NoSuchElementException异常。大大提高了代码的容错性。

   伪元素关闭按钮的点击和延时广告关闭的完整代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time


class Ad_close():
    def __init__(self, url):
        self.url = url
        self.wd=None

    def open_wd(self):
        self.wd = webdriver.Chrome()
        self.wd.get(self.url)

    def find_ad(self):
        self.open_wd()
        self.wd.implicitly_wait(10)  # 设置隐式等待:如果找不到元素,每隔半秒钟去界面上查看一次,直到找到该元素进入下一步
        close = self.wd.find_element(By.CSS_SELECTOR, "[class=\"jsx-2320072050 iconfont icon-close\"]")
        close.click()
        close_ad=self.wd.find_element(By.CSS_SELECTOR,"[style=\"cursor: pointer; position: absolute; top: 0px; left: 0px; z-index: 2147483646; width: auto; height: auto;\"]")
        close_ad.click()
        print("successful")
        time.sleep(5)
        self.wd.quit()


url = "https://cupfox.app/"
close = Ad_close(url)  # 类的实例化
close.find_ad()

   综上所述,就可以完成CSS_SELECTOR定位网页元素中的伪元素,以及使用隐式等待寻找广告的关闭按钮元素

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值