python之selenium调用xpath实现网页操作

python selenium调用xpath实现浏览器操作

源码

#coding=utf-8
#program:供本司运维人员填写bbs日志使用
#author:sundz
#V1 20220623 创建代码 实现点击
#V2 20220626 从Excel中获取数据自动填充;实现从交易所网站获取当日实时成交量
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import xlrd
import datetime
s = Service("msedgedriver.exe")
driver = webdriver.Edge(service=s)
driver.get('http://192.168.28.101/WebLog/index.jsp?userName=sundz')   #打开网页
#URL = input('Enter Your BBS-URL : ')
#driver.get(URL)   #打开网页
driver.maximize_window()                    #最大化窗口
#进入填写当前日志frame
driver.switch_to.frame("leftFrame")
driver.find_element(by=By.XPATH, value="/html/body/a[1]").click()
sleep(1)
driver.switch_to.default_content() #切换回主frame 以进入列表frame进行填写
driver.switch_to.frame("mainFrame") #列表和进入列表的frame都是mainFrame

def commit():   #提交
    driver.find_element(by=By.XPATH, value="/html/body/form/p/input[1]").click()  #提交按钮
    #sleep(1)
    #处理网页弹框
    alert=driver.switch_to.alert
    #print(alert.text)
    alert.accept()
    alert.accept()
def review():   #复核
    driver.find_element(by=By.XPATH, value="/html/body/form/p/input[2]").click()  #复核按钮
    #sleep(1)
    #处理网页弹框
    alert=driver.switch_to.alert
    #print(alert.text)
    alert.accept()
    alert.accept()
    sleep(1)
def listname(listname): #进入表格
    driver.find_element(by=By.XPATH, value=listname).click() #进入表格 也是mainframe
    commit()    #提交
    #复核
    driver.find_element(by=By.XPATH, value=listname).click()
    #sleep(1)
    review()    #复核
def xls_to_URL(a,b,c):  #excel数据处理进网页,a b是excel坐标,c是需要填充的xpath
    filename = (datetime.datetime.now().strftime("%Y%m%d") + '运行日报委托成交统计.xls')
    work_book = xlrd.open_workbook(filename)
    table = work_book.sheet_by_index(0) #通过索引获取sheet
    work_book.sheet_loaded(0)   # 检查某个sheet是否导入完毕
    str_0 = table.cell_value(a,b)   # 返回单元格中的数据类型
    str_1 = str_0.split(":", 2)[1]  #单元格数据处理完成
    #填充网页数据,先置空再填充
    driver.find_element(by=By.XPATH, value=c).send_keys("")
    driver.find_element(by=By.XPATH, value=c).send_keys(str_1)

#listname("/html/body/table/tbody/tr[2]/td[2]/a")
#对第一个列表处理 因为填充数据
driver.find_element(by=By.XPATH, value="/html/body/table/tbody/tr[2]/td[2]/a").click() #进入表格 也是mainframe
xls_to_URL(1,2,"/html/body/form/table[2]/tbody/tr[21]/td[5]/textarea")
xls_to_URL(2,2,"/html/body/form/table[2]/tbody/tr[22]/td[5]/textarea")
xls_to_URL(3,2,"/html/body/form/table[2]/tbody/tr[23]/td[5]/textarea")
xls_to_URL(4,2,"/html/body/form/table[2]/tbody/tr[24]/td[5]/textarea")
xls_to_URL(5,2,"/html/body/form/table[2]/tbody/tr[25]/td[5]/textarea")
xls_to_URL(6,2,"/html/body/form/table[2]/tbody/tr[26]/td[5]/textarea")
xls_to_URL(7,2,"/html/body/form/table[2]/tbody/tr[27]/td[5]/textarea")
xls_to_URL(8,2,"/html/body/form/table[2]/tbody/tr[30]/td[5]/textarea")
xls_to_URL(9,2,"/html/body/form/table[2]/tbody/tr[31]/td[5]/textarea")
xls_to_URL(10,2,"/html/body/form/table[2]/tbody/tr[32]/td[5]/textarea")
xls_to_URL(11,2,"/html/body/form/table[2]/tbody/tr[33]/td[5]/textarea")
xls_to_URL(12,2,"/html/body/form/table[2]/tbody/tr[34]/td[5]/textarea")
xls_to_URL(13,2,"/html/body/form/table[2]/tbody/tr[35]/td[5]/textarea")
xls_to_URL(14,2,"/html/body/form/table[2]/tbody/tr[36]/td[5]/textarea")
commit()    #提交
driver.find_element(by=By.XPATH, value="/html/body/table/tbody/tr[2]/td[2]/a").click() #再次进入复核
review()    #复核

listname("/html/body/table/tbody/tr[3]/td[2]/a")
listname("/html/body/table/tbody/tr[4]/td[2]/a")
listname("/html/body/table/tbody/tr[5]/td[2]/a")
listname("/html/body/table/tbody/tr[6]/td[2]/a")
listname("/html/body/table/tbody/tr[7]/td[2]/a")
listname("/html/body/table/tbody/tr[8]/td[2]/a")
listname("/html/body/table/tbody/tr[9]/td[2]/a")
listname("/html/body/table/tbody/tr[10]/td[2]/a")
listname("/html/body/table/tbody/tr[11]/td[2]/a")
listname("/html/body/table/tbody/tr[12]/td[2]/a")
listname("/html/body/table/tbody/tr[13]/td[2]/a")
listname("/html/body/table/tbody/tr[14]/td[2]/a")
listname("/html/body/table/tbody/tr[15]/td[2]/a")
listname("/html/body/table/tbody/tr[16]/td[2]/a")
listname("/html/body/table/tbody/tr[17]/td[2]/a")
listname("/html/body/table/tbody/tr[18]/td[2]/a")
listname("/html/body/table/tbody/tr[19]/td[2]/a")
listname("/html/body/table/tbody/tr[20]/td[2]/a")
listname("/html/body/table/tbody/tr[21]/td[2]/a")
listname("/html/body/table/tbody/tr[28]/td[2]/a")
listname("/html/body/table/tbody/tr[30]/td[2]/a")
listname("/html/body/table/tbody/tr[31]/td[2]/a")
listname("/html/body/table/tbody/tr[32]/td[2]/a")

#以下内容填充沪深成交额
#上海成交额
driver.get('http://q.10jqka.com.cn/zs/detail/code/1A0001/')   #打开网页
a = driver.find_element(by=By.XPATH, value="/html/body/div[2]/div[3]/div[2]/div/div/div[1]/div[2]/dl[7]/dd").text
#深圳成交额
driver.get('http://www.szse.cn/')   #打开网页
b = driver.find_element(by=By.XPATH, value="/html/body/div[11]/div/div/div[1]/div[3]/div[1]/div[1]/div/ul/li[1]/span[4]").text
c = "沪:" + a + "  深:" + b
driver.get('http://192.168.28.101/WebLog/index.jsp?userName=sundz')   #打开网页
#进入填写当前日志frame
driver.switch_to.frame("leftFrame")
driver.find_element(by=By.XPATH, value="/html/body/a[1]").click()
sleep(1)
driver.switch_to.default_content() #切换回主frame 以进入列表frame进行填写
driver.switch_to.frame("mainFrame") #列表和进入列表的frame都是mainFrame
driver.find_element(by=By.XPATH, value="/html/body/table/tbody/tr[2]/td[2]/a").click() #进入表格 也是mainframe
#print (c)
driver.find_element(by=By.XPATH, value="/html/body/form/table[2]/tbody/tr[20]/td[5]/textarea").send_keys(c)
commit()    #提交
driver.find_element(by=By.XPATH, value="/html/body/table/tbody/tr[2]/td[2]/a").click() #再次进入复核
review()    #复核

过程中遇到的主要问题

1.调用xpath之前 需要先调用frame 以定位!!!
2.定位到新的frame 需要先退出之前的frame

主要涉及的技术处理

1.xpath调用
2.浏览器驱动调用
3.网页弹框处理
4.xlrd库

存在疑问:

1.对已经填充xpath数据的网页 怎么把数据置空
2.检测浏览器是否打开 打开则继续使用

Original: https://www.cnblogs.com/sunfankun/p/16408142.html
Author: 孙犯困
Title: python之selenium调用xpath实现网页操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499242/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【华为OD机试真题23 JAVA】单词倒序

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 Original: https://blo…

    Python 2023年9月17日
    093
  • 2022 Python3.8 多线程、多进程最全整理

    Original: https://www.cnblogs.com/lihanlin/p/16202645.htmlAuthor: 李翰林Title: 2022 Python3.8…

    Python 2023年5月24日
    0100
  • ai智能raw图片编辑器:ON1 Photo RAW 2023 for Mac/Win(照片编辑器)

    Original: https://www.cnblogs.com/aurora-123/p/16772069.htmlAuthor: 佛系女孩Title: ai智能raw图片编辑…

    Python 2023年10月28日
    087
  • django8 DRF框架 序列化器 增删改查

    1.1命令框内创建新项目 打开指定文件夹,在路径位置输入cmd打开命令行django-admin startproject 项目名 创建项目 1.2在新项目内创建子应用 pytho…

    Python 2023年8月4日
    065
  • 将macos中conda的某一环境迁移到ubuntu中

    由于我们使用macos时配置好了python环境,也进行了深度学习训练的测试,此时,我们想把代码扔到服务器上进行训练,可是有些python包和依赖包,我们并不想一一重新在服务器上训…

    Python 2023年9月9日
    078
  • 字符串转换篇

    atof(将字符串转换成浮点型数)相关函数: atoi,atol,strtod,strtol,strtoul表头文件: #include定义函数: double atof(cons…

    Python 2023年11月6日
    064
  • 轻量级网络-VoVNet 论文解读

    摘要 1,介绍 2,高效网络设计的影响因素 2.1,内存访问代价 2.2,GPU计算效率 3,建议的方法 3.1,重新思考密集连接 3.2,One-Shot Aggregation…

    Python 2023年10月25日
    086
  • pytest入门[3]

    一、@pytest.mark.parametrize()基本用法 二、YAML文件详解—实现接口自动化 三、接口测试以及接口自动化的行业 四、requests库简介 五…

    Python 2023年9月12日
    092
  • Pytorch安装,这一篇就够了,绝不踩坑

    在pytorch安装时踩到了不少坑,看了好多博客,最后整合了一份不会踩坑的安装教程,主要是参考各个博主的内容,从零开始安装pytorch,分享给大家! 因为这篇文章是整合各个链接,…

    Python 2023年9月27日
    0108
  • pandas.DataFrame.iloc函数总结

    pandas.DataFrame.iloc函数 property DataFrame.iloc:基于整数的用于选定所需数据的函数。 函数输入: 单个整数; 整数型list或者arr…

    Python 2023年8月7日
    082
  • 常用的即插即用的注意力机制模块(SE、CBAM)

    1、SENet 1.1 前言 SENet 是最后一届 ImageNet 2017 竞赛分类任务的冠军。SENet 网络的创新点在于关注 channel 之间的关系,希望模型可以自动…

    Python 2023年8月1日
    0174
  • matplotlib库使用

    axes Axes.barh 创建一个水平条形图。 The bars are positioned at y with the given alignment. Their dim…

    Python 2023年9月4日
    099
  • 图片文字识别python

    一、功能介绍 利用python对图片内文字内容进行识别提取。 二、调用库下载 我们需要下载两个模块: pip install pytesseract pip install pil…

    Python 2023年8月1日
    0104
  • Django模板语法和ModelForm

    ModelForm 或者 Form组件的作用: 模板时间格式化显示 {{item.event_start|date:”Y-m-d H:i:s”}}{{bio…

    Python 2023年8月4日
    080
  • 在vscode中配置python的安装环境

    一、首先需要下载python版本和vscode的版本 这个需要自己根绝电脑的操作系统进行配置 1、python安装官网:https://www.python.org/downloa…

    Python 2023年8月1日
    0118
  • 【Linux】进程信号万字详解(上)

    🎇Linux: 博客主页: 一起去看日落吗 分享博主的在Linux中学习到的知识和遇到的问题 博主的&#x…

    Python 2023年11月5日
    057
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球