为selenium添加其他属性定位器,使用type,alt,href等其他属性定位元素

文章介绍了如何在Python的Selenium模块中自定义`find_element`方法,以便使用元素的`alt`属性进行定位。作者因为需要定位包含图片链接的元素,发现XPath表达式复杂且不易处理多张图片,所以通过修改源码增加了对`alt`属性的支持,简化了元素查找的过程。

为selenium添加其他属性定位器,使用type,alt,href等其他属性定位元素(python模块)

最近在做爬虫时候发现想用selenium做爬虫时,用模块自带的属性定位函数进行定位很不方便,我要定位的是一个包含图片链接的元素,使用xpath的话就特别长,而且多张图片的话xpath就需要加个变量,但是事先又不好得知有多少图片,此时我发现每个图片链接的元素前都有一个[alt = “Image”]的属性值,并且是只有图片有,于是我就对selenium进行添加。

# find_element()在selenium\webdriver.py 下
def find_element(self, by=By.ID, value: Optional[str] = None) -> WebElement:
        if isinstance(by, RelativeBy):
            elements = self.find_elements(by=by, value=value)
            if not elements:
                raise NoSuchElementException(f"Cannot locate relative element with: {by.root}")
            return elements[0]
        if by == By.ID:
            by = By.CSS_SELECTOR
            value = f'[id="{value}"]'
        elif by == By.CLASS_NAME:
            by = By.CSS_SELECTOR
            value = f".{value}"
        elif by == By.NAME:
            by = By.CSS_SELECTOR
            value = f'[name="{value}"]'
        elif by == By.ALT: #按着上面的代码增加一个Alt
            by = By.CSS_SELECTOR #每种定位器都是在CSS_SELECTOR基础上建立的
            value = f'[alt="{value}"]'#按着属性名添加一种定位形式
        return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]

还有记得要by.py下添加属性名

class By:
    """Set of supported locator strategies."""
    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector"
    ALT = "alt"

嫌麻烦也可以改成字符串 by==“xxx”

elif by == “xxx”: #属性名
     by = By.CSS_SELECTOR #每种定位器都是在CSS_SELECTOR基础上建立的
     value = f'[xxx="{value}"]'#按着属性名添加一种定位形式

使用方法

webdriver.Edge.find_element(“xxx”,"xxxxx")#xxx为属性名,xxxxx为属性值




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值