云渊流沙 2023-04-11 16:39 采纳率: 75%
浏览 213
已结题

python关于#web自动化#的问题,如何解决?

调试代码
lure.py

import argparse
import sys
import time
import pandas as pd
from pandas import DataFrame
from selenium import webdriver
from selenium.webdriver.common.by import By

# 传值判断
if len(sys.argv) != 4:
    sys.exit(1)
# 读取excel
df: DataFrame = pd.read_excel(sys.argv[3], sheet_name='Sheet1')
# Chrome浏览器
driver = webdriver.Chrome()
driver.get('网站')
time.sleep(1)
# By定位 内置账号密码登录
phone = driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div/div/div/div/div[2]/div[1]/div/div['
                                      '1]/div/div[2]/input')
phone.send_keys(sys.argv[1])
driver.implicitly_wait(5)
password = driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div/div/div/div/div[2]/div[1]/div/div['
                                         '2]/div/div/div[2]/input')
password.send_keys(sys.argv[2])
driver.implicitly_wait(5)
logon = driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div/div/div/div/div[2]/div[1]/div/a')
logon.click()
time.sleep(1)
# 进入页面
driver.get('网站')
# 切换到当前窗口
driver.switch_to.window(driver.window_handles[-1])
driver.implicitly_wait(5)
xm = []
sjh = []
c1 = 0
c2 = 0
for idx, row in df.iterrows():
    xm = row['姓名']
    sjh = row['手机号']
    # 姓名
    driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div[1]/div/div/div/div[1]/form/div/div/div[1]/div['
                                  '2]/div/div[2]/input').send_keys(xm)
    time.sleep(0.3)
    # 性别男
    male = driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div[1]/div/div/div/div[1]/form/div/div/div['
                                         '1]/div[3]/div[1]/div/div[2]/label[1]/span[2]')
    driver.execute_script("arguments[0].click();", male)
    time.sleep(0.2)
    # 手机号类别
    driver.find_element(By.CSS_SELECTOR,
                        'div > div > form > div > div > div > div:nth-child(4) > div.am-list-line > div '
                        '> div > label:nth-child(1) > span.am-radio:first-child').click()
    driver.implicitly_wait(10)
    time.sleep(0.2)
    # 手机号
    phone = driver.find_element(By.CSS_SELECTOR, 'div > div > form > div > div > div > '
                                                 'div.am-list-item.am-input-item.am-list-item-middle.add-customer-input'
                                                 '.undefined.add-customer-phone > div > div.am-input-control > input')
    js1 = "arguments[0].scrollIntoView();"
    driver.execute_script(js1, phone)
    phone.send_keys(sjh)
    time.sleep(0.2)
    # 打开楼盘选择
    driver.find_element(By.CSS_SELECTOR, 'div > div > form > div > div > div.am-list-item.am-list-item-middle > '
                                         'div.am-list-line > div > div').click()
    driver.implicitly_wait(3)
    # 选择楼盘
    driver.find_element(By.CSS_SELECTOR, '#divBuildingScroll > div > div:nth-child(3)').click()
    driver.implicitly_wait(3)
    time.sleep(1)
    # 推荐
    driver.find_element(By.CSS_SELECTOR, 'div > div > form > div > div > div > a').click()
    time.sleep(1)
    # 判断推荐是否成功
    report = '报备成功'
    failure1 = '推荐失败'
    success = driver.find_elements(By.LINK_TEXT, '报备成功')
    failure = driver.find_elements(By.LINK_TEXT, '推荐失败')
    if success == report:
        c1 = c1 + 1
        data = {'结果': ['报备成功']}
    else:
        c2 = c2 + 1
        data = {'结果': ['报备失败']}
    data = pd.DataFrame(data)
    # 将新数据与旧数据合并起来
    data1 = pd.concat([df, data])
    data1.to_excel(sys.argv[3], index=False)
    # 继续推荐
    driver.find_element(By.CSS_SELECTOR, 'div > div.report-done__btn.white.undefined').click()
driver.implicitly_wait(20)
# 传递参数
# 初始化参数构造器
parser = argparse.ArgumentParser()
# 在参数命令行添加两个命令行参数
parser.add_argument('--cc1', type=str, default=c1)
parser.add_argument('--cc2', type=str, default=c2)
# 获取所有命令行参数
args = parser.parse_args()

front.py

import sys
import subprocess
from tkinter import *
from lure import args
from tkinter import filedialog


def end():
    sys.exit(0)


def select():
    filename = filedialog.askopenfilename()
    if filename != '':
        path.set(filename)


def bring():
    global b1, b2, b3
    b1 = inp1.get()
    b2 = inp2.get()
    b3 = inp3.get()
    subprocess.Popen(['python', 'lure.py', b1, b2, b3])
    return None


# 图形化界面
root = Tk()
root.title('明源云客报备')
root.geometry('500x400')
path = StringVar()
a1 = StringVar()
a2 = StringVar()
b1, b2, b3 = None, None, None
lb1 = Label(root, text='账号', relief=RAISED)
lb1.place(relx=0.05, rely=0.1, relwidth=0.4, relheight=0.1)
inp1 = Entry(root, textvariable=a1)
inp1.place(relx=0.5, rely=0.1, relwidth=0.4, relheight=0.1)
lb2 = Label(root, text='密码', relief=RAISED)
lb2.place(relx=0.05, rely=0.25, relwidth=0.4, relheight=0.1)
inp2 = Entry(root, textvariable=a2)
inp2.place(relx=0.5, rely=0.25, relwidth=0.4, relheight=0.1)
inp3 = Entry(root, textvariable=path)
inp3.place(relx=0.5, rely=0.4, relwidth=0.4, relheight=0.1)
btn1 = Button(text='请选择源文件', command=select)
btn1.place(relx=0.05, rely=0.4, relwidth=0.4, relheight=0.1)
btn2 = Button(root, text='开始', command=bring)
btn2.place(relx=0.05, rely=0.55, relwidth=0.4, relheight=0.1)
btn3 = Button(root, text='结束', command=end)
btn3.place(relx=0.5, rely=0.55, relwidth=0.4, relheight=0.1)
txt = Text(root, relief=SUNKEN)
txt.insert(END, ('报备成功:' + str(args.cc1) + '组' + '\n' + '报备失败:' + str(args.cc2) + '组'))
txt.place(relx=0.05, rely=0.7, relwidth=0.85, relheight=0.25)
root.mainloop()


请求优化代码 使程序可以运行 谢谢

  • 写回答

6条回答 默认 最新

  • yhd_123 2023-04-12 23:26
    关注
    
    import sys
    from subprocess import  Popen,PIPE
    from tkinter import *
    # from lure import args
    from tkinter import filedialog
    
    
    def end():
        sys.exit(0)
    
    
    def select():
        filename = filedialog.askopenfilename()
        if filename != '':
            path.set(filename)
    
    
    
    def bring():
        global b1, b2, b3
        b1 = inp1.get()
        b2 = inp2.get()
        b3 = inp3.get()
        p = Popen(['python', 'lure.py', b1, b2, b3],stdin=PIPE, stdout=PIPE,
                  stderr=PIPE, shell=True)
        p.wait()
        t = p.stdout
        txt.insert(END, ('报备成功:' + str(t) + '组' + '\n' + '报备失败:' + str(t) + '组'))
    
        return None
    
    
    # 图形化界面
    root = Tk()
    root.title('明源云客报备')
    root.geometry('500x400')
    path = StringVar()
    a1 = StringVar()
    a2 = StringVar()
    a1.set('博主的账户')
    a2.set('博主的密码')
    b1, b2, b3 = None, None, None
    lb1 = Label(root, text='账号', relief=RAISED)
    lb1.place(relx=0.05, rely=0.1, relwidth=0.4, relheight=0.1)
    inp1 = Entry(root, textvariable=a1)
    inp1.place(relx=0.5, rely=0.1, relwidth=0.4, relheight=0.1)
    lb2 = Label(root, text='密码', relief=RAISED)
    lb2.place(relx=0.05, rely=0.25, relwidth=0.4, relheight=0.1)
    inp2 = Entry(root, textvariable=a2)
    inp2.place(relx=0.5, rely=0.25, relwidth=0.4, relheight=0.1)
    inp3 = Entry(root, textvariable=path)
    inp3.place(relx=0.5, rely=0.4, relwidth=0.4, relheight=0.1)
    btn1 = Button(text='请选择源文件', command=select)
    btn1.place(relx=0.05, rely=0.4, relwidth=0.4, relheight=0.1)
    btn2 = Button(root, text='开始', command=bring)
    btn2.place(relx=0.05, rely=0.55, relwidth=0.4, relheight=0.1)
    btn3 = Button(root, text='结束', command=end)
    btn3.place(relx=0.5, rely=0.55, relwidth=0.4, relheight=0.1)
    txt = Text(root, relief=SUNKEN)
    
    txt.place(relx=0.05, rely=0.7, relwidth=0.85, relheight=0.25)
    root.mainloop()
    
    
    

    博主代码有一个致命问题,就是重复调用了lure文件

    ```python
    from lure import args

    ```和

    ```python
    subprocess.Popen(['python', 'lure.py', str(b1), str(b2), str(b3)])

    ```,这两个看似没有问题实则是导致问题的关键,你可参试用subprocess模块中的PIPE来开通与终端的交互,这样执行完后的结果与参数可以通过t = p.stdout来实现参数传递,但是博主的第二个脚本还存在一些问题,这里需要博主自行更改一下,这个部分其实并不困难,元素定位就行,然后本人直接舍弃了上面的from lure import args这个调用方法,从而使代码能够成功运行!
    当然 p.wait()的阻塞也很关键,不然一样会出现闪退!
    最后希望这些建议能够帮助到博主!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 赞助了问题酬金15元 4月12日
  • 修改了问题 4月12日
  • 展开全部

悬赏问题

  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”