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:

相关推荐
行路见知23 分钟前
1.5 Go切片使用
开发语言·golang
子燕若水2 小时前
uv 安装包
开发语言·chrome·python
weixin_307779132 小时前
Python获取能唯一确定一棵给定的树的最少数量的拓扑序列
数据结构·python
A.sir啊3 小时前
爬虫基础(六)代理简述
爬虫·python·网络协议
weixin_307779133 小时前
PySPARK带多组参数和标签的SparkSQL批量数据导出到S3的程序
大数据·数据仓库·python·sql·spark
不会打代码呜呜呜呜3 小时前
小白零基础--CPP多线程
开发语言·c++·算法
涛ing3 小时前
【5. C++ 变量作用域及其深入探讨】
java·linux·c语言·开发语言·c++·ubuntu·vim
Hi Man4 小时前
Python之如何在Visual Studio Code 中写的python程序打包成可以在Windows系统下运行的.exe程序
开发语言·vscode·python
Return-Log4 小时前
Matplotlab显示OpenCV读取到的图像
python·opencv
程序趣谈4 小时前
算法随笔_36: 复写零
数据结构·python·算法