• python用selenium网页模拟时xpath无法定位元素解决方法2


    有时我们在使用python selenium xpath时,无法定位元素,红字显示no such element。上一篇文章写了1种情况,是包含iframe的,详见https://blog.csdn.net/Sixth5/article/details/140342929。

    本篇写第2种情况,就是xpath定位的元素中有变化的数字,比如wb这个上传视频的网址,“上传视频”的按钮,我们点击copy xpath后,得到的xpath是//[@id=“video_button_upload_1721110144093”],这里面有数字1721110144093,它是随着网页变化的,刷新网页后又会变化,所以给我们用xpath定位增加了难度。
    在这里插入图片描述
    我们发现1721110144093这个数字在网页代码中是存在的,所以解决方法是使用正则定位抓取数字,然后拼接出xpath再用于定位元素。我们需要用到的代码如下,主要使用的是beautifulSoup读取网页,再用re正则(.
    ?)精准定位数字的位置,由于网页代码中有多个重复内容,所以使用list容器,再使用data[1],即list里的第一个元素,准确把数字提取出,然后拼接,就拿到最终的动态变化的xpath啦!!

    import time
    from selenium.webdriver import Chrome
    from selenium.webdriver.common.by import By
    from selenium import webdriver
    from bs4 import BeautifulSoup #网页解析,获取数据
    import re   #正则表达式,进行文字匹配
    
    web = Chrome()
    web.maximize_window()
    url = 'https://weibo.com/upload/channel'
    web.get(url)
    time.sleep(10)
    web.find_element(By.XPATH,'//*[@id="__sidebar"]/div/div[2]/div[1]/div/button').click() # 点击立即登录
    time.sleep(30)#扫码登录
    for i in range(0, 3):
        html = web.page_source
        #print(html)
        soup = BeautifulSoup(html, "html.parser")
        findLink = re.compile(r'')
        data = []
        for item in soup.find_all('button'):
          #  print(item)
            item = str(item)
            link = re.findall(findLink, item)
         #   print(link)
            data.append(link)
        code1 = ";".join(data[1])
        time.sleep(1)
        web.find_element(By.XPATH,'//*[@id="video_button_upload_'+ code1+'"]').click() # 点击上传视频
    

    另外附:
    解决方法3:

  • 相关阅读:
    Spring Boot项目中使用Logback日志与使用AOP拦截请求日志信息
    数据分析1-matplotlib
    雇佣收银员(差分约束)
    WebSocket实时应用
    springboot配置多个数据源
    【Redis 基础】什么是缓存穿透、缓存雪崩和缓存击穿
    DPDK以太网部分代码整理
    【已解决】sudo: apt: command not found 或者apt-get: command not found解决方案
    Dockerfile(5) - CMD 指令详解
    kafka属性说明
  • 原文地址:https://blog.csdn.net/Sixth5/article/details/140344343