Python + Selenium Web自动化实战项目(1)

一、分享几个学习python网页自动化的教程
1、B站视频教程
2、文字教程

二、话不多说直接上代码

# 计算kane
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
import xlrd
from time import sleep
from xlutils.copy import copy
import xlwt
import openpyxl as op

# 打开excel表格
data_excel = xlrd.open_workbook('浅前房公式计算20220718.xlsx')

#wb = xlwt.Workbook('浅前房公式计算20220718_已计算.xlsx')
# wb = copy(data_excel)  # 复制原有表格
# ws = wb.get_sheet(0)

wb = op.load_workbook("浅前房公式计算20220718_已计算.xlsx")
ws = wb["简略版"]

# 获取所有sheet名称
names = data_excel.sheet_names()
# 获取book中的sheet工作表,返回一个xlrd.sheet.Sheet()对象
table = data_excel.sheet_by_name(sheet_name='简略版')    # 通过名称获取
# excel工作表的行列操作
n_rows = table.nrows    # 获取该sheet中的有效行数 1118行

wd = webdriver.Edge("msedgedriver")  # 激活浏览器驱动
#wd = webdriver.Chrome("chromedriver")  # 激活浏览器驱动
wd.implicitly_wait(10)  # 等待时间
wd.get("https://www.iolformula.com/")  # 打开网址
wd.find_element(By.CSS_SELECTOR, '#post-30 > div > div > div').click()  # 点击 I agree

# 共1117行

start = 1  # 开始序号
lenth = 1117  # 一次计算量
for j in range(lenth):
    row = start + j
    # 返回某行中所有单元格的数据组成的列表 row_data
    row_data=table.row_values(row, start_colx=0, end_colx=None)  # [1.0, '599894', 'F', '人工晶体 ZCB00', '24.0D', 119.36, 22.3276213748915, 44.6550089391462, 46.361144809085, 2.91141362454544, 4.77435495569251, 0.529769979523909, 529.769979523909, '', -0.34]

    acd = row_data[9]
    acd = float(acd)

    # 先判断 acd值是否在范围内
    while( ((acd>1.50)or(acd==1.50))and(acd<5.00)or(acd==5.00) ):
        xuhao = int(row_data[0])
        id = row_data[1]  # 获取id
        sex = row_data[2]  # 获取性别
        iol_type = row_data[3]  # 晶体类型
        IOLPower = row_data[4]  # 功率
        IOLPower = IOLPower[0:-1]
        al = row_data[6]
        k1 = row_data[7]
        k2 = row_data[8]
        lt = row_data[10]
        CCT = row_data[12]
        kane = 0


        # 1.输入ID
        wd.find_element(By.CSS_SELECTOR, '#ID').send_keys('{}'.format(id))
        # 2.点击性别 M/F
        if sex == "M":
            wd.find_element(By.CSS_SELECTOR, 'body > div.container > div > div > form > div:nth-child(3) > div:nth-child(3) > div > div > div > div.btn-group.radio-group.h-gender > label:nth-child(1)').click()
        else:
            wd.find_element(By.CSS_SELECTOR, 'body > div.container > div > div > form > div:nth-child(3) > div:nth-child(3) > div > div > div > div.btn-group.radio-group.h-gender > label:nth-child(2)').click()
        # 3.填写A-Constant 或 选择iol_type
        if iol_type == "人工晶体 ZCB00":
            iolconstant = 119.36
        else:
            iolconstant = 119.2
        wd.find_element(By.CSS_SELECTOR, '#A-Constant1').send_keys('{}'.format(iolconstant))
        #Select(wd.find_element(By.ID, 'type1')).select_by_value('4')  # 根据ID选取复选框选项
        # 4.填写AL
        wd.find_element(By.CSS_SELECTOR, '#al-right').send_keys('{:.2f}'.format(float(al)))
        # 5.填写k1
        wd.find_element(By.CSS_SELECTOR, '#k1-right').send_keys('{:.2f}'.format(float(k1)))
        # 6.填写k2
        wd.find_element(By.CSS_SELECTOR, '#k2-right').send_keys('{:.2f}'.format(float(k2)))
        # 7.填写acd
        wd.find_element(By.CSS_SELECTOR, '#acd-right').send_keys('{:.2f}'.format(float(acd)))
        # 8.填写lt
        wd.find_element(By.CSS_SELECTOR, '#lt-right').send_keys('{:.2f}'.format(float(lt)))
        # 9.填写CCT
        wd.find_element(By.CSS_SELECTOR, '#cct-right').send_keys('{}'.format(CCT))

        # 10.点击计算
        wd.find_element(By.CSS_SELECTOR, 'body > div.container > div > div > form > div.blocks_button > div.button_submit_block.form-group.submit.row.jq_class_1 > div:nth-child(1) > input').click()

        # 等待 8sleep(8)

        # 11.输出kane值
        element = wd.find_element(By.XPATH, '/html/body/div[2]/div/div/form/div[4]/div/div/div[1]/div[2]/div/div/div[2]/table/tbody')
        elements = element.find_elements(By.TAG_NAME, 'td')
        num = len(elements)
        for i in range(num):
            if elements[i].text == IOLPower:
                kane = elements[i+1].text
                break
        print("序号 = {} , id = {}, IOLPower = {}, kane = {}".format(xuhao, id, IOLPower, kane))

        # 12.将kane写入excel表格
        #ws.write(row, 13, kane)
        ws.cell(row + 1, 14, kane)

        # 13.点击 new patient 下一位病人
        wd.find_element(By.CSS_SELECTOR,'body > div.container > div > div > form > div.blocks_button > div.button_result_block > div > div:nth-child(3) > input').click()
        wb.save("浅前房公式计算20220718_已计算.xlsx")
        break

# #Select(wd.find_element(By.ID, 'org_type1')).select_by_visible_text('社会服务机构')  # 根据文本选取复选框选项
#
# # 打开复选框后进入了嵌套的html界面
# wd.find_element(By.CSS_SELECTOR, '#org_record1 > tr:nth-child(2) > td:nth-child(2) > a').click()  # 点击选择
# wd.switch_to.frame(wd.find_element(By.CSS_SELECTOR, 'body > div.div_tips > iframe'))
# wd.find_element(By.CSS_SELECTOR, '#org_list > ul > li > span.son > ul > li:nth-child(1) > a:nth-child(3)').click()  # 点击东城区
# wd.switch_to.default_content()
#
# wd.find_element(By.CSS_SELECTOR, 'body > div.nav > div > a:nth-child(2)').click()  # 点击志愿项目
# wd.find_element(By.CSS_SELECTOR, 'body > div.main > div:nth-child(1) > ul > li:nth-child(2) > div > a').click()  # 点击图片
#
# # 若跳转到其他网址需使用下面四句判断
# for window_handle in wd.window_handles:
#     wd.switch_to.window(window_handle)
#     if '助力' in wd.title:
#         break
#
# # wd.find_element(By.CSS_SELECTOR, '#main_body > div.wrap.clearfix.m10 > div.conr >'
# #                                  ' div:nth-child(2) > table > tbody > tr > td:nth-child(2) > a').click()  # 验证是否转到对应网页
# # wd.quit()  # 退出浏览器驱动,一般不加
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

模拟IC攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值