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

news/2024/8/27 11:04:56 标签: python, selenium, 开发语言

有时我们在使用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:


http://www.niftyadmin.cn/n/5558868.html

相关文章

xmind梳理测试点,根据这些测试点去写测试用例

基本流&#xff08;冒烟用例必写&#xff09; 备选流 公共测试点&#xff1a;

数据库基础-进阶

数据库管理&#xff1a; *sql语句 数据库用来增删改查的语句 *** 备份 数据库的数据进行备份 * 主从复制&#xff0c;读写分离&#xff0c;高可用 原理 数据库的概念和相关的语法和规范&#xff1a; 数据库&#xff1a;组织&#xff0c;存储&#xff0c;管理数据的仓库。 数据…

django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出

使用crontab执行python脚本时&#xff0c;有时会遇到脚本无法执行的问题。这是因为crontab在执行任务时使用的环境变量与我们在终端中使用的环境变量不同。具体来说&#xff0c;crontab使用的环境变量是非交互式(non-interactive)环境变量&#xff0c;而终端则使用交互式(inter…

GoT 思维图:使用图论来建模并增强LLMs的推理过程

GoT 思维图&#xff1a;使用图论来建模并增强LLMs的推理过程 提出背景为什么使用 GoT&#xff1f; GoT 子解法1&#xff08;图形结构化&#xff09; 子解法2&#xff08;自我评估&#xff09; 子解法3&#xff08;模块化任务处理&#xff09;聚合与生成 GoT 流程1. Prompter&a…

django报错(一):python manage.py makemigrations,显示“No changes detected”

执行python manage.py makemigrations命令无任何文件生成&#xff0c;结果显示“No changes detected”。 解决方案一&#xff1a; 1、执行命令&#xff1a;python manage.py makemigrations –empty appname 2、删除其中的0001_initial.py文件&#xff08;因为这个文件内容是…

C++ | Leetcode C++题解之第238题除自身以外数组的乘积

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> productExceptSelf(vector<int>& nums) {int length nums.size();// L 和 R 分别表示左右两侧的乘积列表vector<int> L(length, 0), R(length, 0);vector<int> answer(l…

电机控制杂谈——以袁雷老师滑模控制模型为例子,如何搭建准确的电机仿真模型

网上的电机控制模型一大堆&#xff0c;可能初学者看的最多的就是袁雷老师的教材了。 袁老师的教材年份也比较早了&#xff0c;都已经是十年前的东西了&#xff0c;教材中有些缺漏还是需要修改修改的。即使教材中有些不当之处&#xff0c;但是这边教材的贡献还是不可否认的&…

服务器基础2

服务器基础复习02 1.网络管理 nmcli nmcli是NetworkManager的一个命令行工具&#xff0c;它提供了使用命令行配置由NetworkManager管理网络连接的方法。nmcli命令的基本格式为&#xff1a; nmcli [OPTIONS] OBJECT { COMMAND | help }其中&#xff0c;OBJECT选项可以是genera…