当前位置: 首页 > news >正文

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'<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:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spark中的JOIN机制
  • 集合的定义和特点
  • springboot个人证书管理系统-计算机毕业设计源码16679
  • <数据集>夜间车辆识别数据集<目标检测>
  • 设计模式-概述*
  • 记录些MySQL题集(9)
  • 深入解析PHP框架:Symfony框架详解与应用
  • 使用MovaXterm连接VMware的centos
  • 数据库管理-第221期 Oracle的高可用-04(20240717)
  • OpenCV下的单目标定,双目标定与立体校正(calibrateCamera, stereoCalibrate and stereoRectify)
  • Linux网络编程-socket套接字使用详解
  • 简约唯美的404HTML源码
  • 什么是边缘计算技术和边缘计算平台?
  • 怎么防止文件被恶意外传
  • .Net--CLS,CTS,CLI,BCL,FCL
  • 【css3】浏览器内核及其兼容性
  • 【知识碎片】第三方登录弹窗效果
  • es6要点
  • ES6语法详解(一)
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript对象详解
  • Koa2 之文件上传下载
  • Node项目之评分系统(二)- 数据库设计
  • Redux系列x:源码分析
  • Vue学习第二天
  • 浮动相关
  • 关于List、List?、ListObject的区别
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 精彩代码 vue.js
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 通信类
  • 最简单的无缝轮播
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​插件化DPI在商用WIFI中的价值
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (一)UDP基本编程步骤
  • (一一四)第九章编程练习
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .form文件_SSM框架文件上传篇
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net core 依赖注入的基本用发
  • .Net Core 中间件与过滤器
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .Net MVC + EF搭建学生管理系统
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net下的富文本编辑器FCKeditor的配置方法
  • .NET正则基础之——正则委托
  • @angular/cli项目构建--http(2)
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [AIGC] 深入浅出 Python中的`enumerate`函数
  • [android] 看博客学习hashCode()和equals()