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啦!!

python 复制代码
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'<button class="woo-button-main woo-button-flat woo-button-primary woo-button-m woo-button-round VideoUpload_btn1_2avmO" id="video_button_upload_(.*?)"><span class="woo-button-wrap"><!-- --><!-- --><!-- --><span class="woo-button-content">上传视频</span></span></button>')
    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:

相关推荐
码海踏浪1 小时前
JMeter 时间函数合集
开发语言·python
serve the people1 小时前
tensorflow 深度解析 Sequential 模型的输入形状指定
人工智能·python·tensorflow
麦麦鸡腿堡1 小时前
Java_反射暴破创建对象与访问类中的成员
java·开发语言
不会c嘎嘎1 小时前
深入理解QT之信号和槽
开发语言·qt
SunnyDays10111 小时前
Python 实现 PDF 文档压缩:完整指南
linux·开发语言·python
长安牧笛1 小时前
设计考研党备考开支追踪程序,记录教材,网课,报名费支出,按科目统计花费,优化备考预算分配。
python
Cx330❀1 小时前
《C++ 动态规划》第001-002题:第N个泰波拉契数,三步问题
开发语言·c++·算法·动态规划
神仙别闹1 小时前
基于Qt5(C++)+SQLite 开发的一个小巧精美的本地音乐播放器
开发语言·c++·qt
差点GDP1 小时前
C语言常用编译命令和示例
c语言·开发语言
长空任鸟飞_阿康1 小时前
LangChain 技术栈全解析:从模型编排到 RAG 实战
前端·python·langchain