机械荟萃山庄

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 979|回复: 7

Python程序中selenium-click动作失效问题求解

[复制链接]

52

主题

346

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
12051
发表于 2024-4-14 21:29:07 | 显示全部楼层 |阅读模式
大家好,最近在用Python鼓捣一个程序,旨在从Excel表格中读取产品信息,并利用selenium将其逐行写入到ERP系统中。使用了一个循环来表示在系统中创建一个产品,逐行读取Excel中的产品信息,直到表格中的每行产品信息都被执行一遍。
然而,遇到了一个问题:在程序运行的第二遍循环中,红框所示的第一个元素的click动作会失效,导致整个程序跳出。我在单步调试时发现,该动作在单步调试中是正常的,但在正常运行时却失效了。
下图中提供了程序的有问题的代码部分(见图三)。希望有经验的大侠能够指点一下。感谢!
图一&二:程序运行过程中红框所示的元素,图三:程序代码部分




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

300

主题

6766

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36389
发表于 2024-4-14 22:07:35 | 显示全部楼层
不熟悉,selenium,和JS 类似嘛,后端的python 代码可以发出来。
回复 支持 反对

使用道具 举报

52

主题

346

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
12051
 楼主| 发表于 2024-4-14 22:19:05 | 显示全部楼层
373527271 发表于 2024-4-14 22:07
不熟悉,selenium,和JS 类似嘛,后端的python 代码可以发出来。

有问题的python 代码如下所示:

# category_dropdown下拉菜单
    product_category_dropdown_button1 = wd.find_element(By.ID,'o_field_input_883').click()  # 下拉菜单按钮
    time.sleep(6)
    product_category_dropdown_button2 = wd.find_element(By.XPATH,'/html/body/ul[1]/li[8]').click()  # 下拉菜单按钮
    time.sleep(6)

    product_category = row['product_category_button']
    if product_category == 'Components':
        product_category1_button = wd.find_element(By.XPATH, '/html/body/div[17]/div/div/main/div/div[2]/div/div/table/tbody/tr[1]/td[1]').click() # 需要Components按钮
        pass
    elif product_category == 'Finished Goods':
        product_category8_button = wd.find_element(By.XPATH, '/html/body/div[17]/div/div/main/div/div[2]/div/div/table/tbody/tr[8]/td[1]').click()  # 需要Finished Goods按钮
        pass
回复 支持 反对

使用道具 举报

300

主题

6766

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36389
发表于 2024-4-14 23:09:57 | 显示全部楼层
深海鱼 发表于 2024-4-14 22:19
有问题的python 代码如下所示:

# category_dropdown下拉菜单

product_category = row['product_category_button']
    if product_category == 'Components':
        product_category1_button = wd.find_element(By.XPATH, '/html/body/div[17]/div/div/main/div/div[2]/div/div/table/tbody/tr[1]/td[1]').click() # 需要Components按钮
        pass
    elif product_category == 'Finished Goods':
        product_category8_button = wd.find_element(By.XPATH, '/html/body/div[17]/div/div/main/div/div[2]/div/div/table/tbody/tr[8]/td[1]').click()  # 需要Finished Goods按钮
        pass
cat_list =product_category_button.item()


可否这样改,if product_category is in cat_list:
                       wd.find_element()
                   else:
                         text = 'Pls input a correct category name'
button event 输出提示。


回复 支持 反对

使用道具 举报

0

主题

12

帖子

2182

积分

金牌会员

Rank: 6Rank: 6

积分
2182
发表于 2024-4-17 23:26:55 | 显示全部楼层
这个下拉框是不是用到ajax 了
xpath找不到就要上下文找了
回复 支持 反对

使用道具 举报

9

主题

251

帖子

9075

积分

论坛元老

Rank: 8Rank: 8

积分
9075
发表于 2024-4-18 08:37:46 | 显示全部楼层
是不是第二遍有两个相似路径?筛选器里找一下
回复 支持 反对

使用道具 举报

52

主题

346

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
12051
 楼主| 发表于 2024-4-18 17:16:35 | 显示全部楼层
373527271 发表于 2024-4-14 23:09
product_category = row['product_category_button']
    if product_category == 'Components':
        ...

感谢回复,最后用webdriverwait+ec解决了。估计是每次加载的时间不稳定造成的,大侠的方法没用过,回头也试试

product_type = row['product_type_button']
    if product_type == 'Consumable':
        product_type_button_locator = (By.XPATH, '/html/body/div[4]/div/div[2]/div/div[1]/div[2]/div[5]/div[2]/div[1]/div/table[1]/tbody/tr[2]/td[2]/select/option[2]')
    elif product_type == 'Storable Product':
        product_type_button_locator = (By.XPATH, '/html/body/div[4]/div/div[2]/div/div[1]/div[2]/div[5]/div[2]/div[1]/div/table[1]/tbody/tr[2]/td[2]/select/option[4]')
    product_type_button = WebDriverWait(wd, 10).until(EC.element_to_be_clickable(product_type_button_locator))
    product_type_button.click()
回复 支持 反对

使用道具 举报

0

主题

1

帖子

17

积分

禁止访问

积分
17
发表于 2024-4-18 20:11:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|机械荟萃山庄 ( 辽ICP备16011317号-1 )

GMT+8, 2024-12-26 17:17 , Processed in 0.134058 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表