深海鱼 发表于 2024-4-14 21:29:07

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

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




373527271 发表于 2024-4-14 22:07:35

不熟悉,selenium,和JS 类似嘛,后端的python 代码可以发出来。

深海鱼 发表于 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/li').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/div/div/main/div/div/div/div/table/tbody/tr/td').click() # 需要Components按钮
      pass
    elif product_category == 'Finished Goods':
      product_category8_button = wd.find_element(By.XPATH, '/html/body/div/div/div/main/div/div/div/div/table/tbody/tr/td').click()# 需要Finished Goods按钮
      pass

373527271 发表于 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/div/div/main/div/div/div/div/table/tbody/tr/td').click() # 需要Components按钮
      pass
    elif product_category == 'Finished Goods':
      product_category8_button = wd.find_element(By.XPATH, '/html/body/div/div/div/main/div/div/div/div/table/tbody/tr/td').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 输出提示。


暮光之城93652 发表于 2024-4-17 23:26:55

这个下拉框是不是用到ajax 了
xpath找不到就要上下文找了

IME 发表于 2024-4-18 08:37:46

是不是第二遍有两个相似路径?筛选器里找一下

深海鱼 发表于 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/div/div/div/div/div/div/div/div/div/table/tbody/tr/td/select/option')
    elif product_type == 'Storable Product':
      product_type_button_locator = (By.XPATH, '/html/body/div/div/div/div/div/div/div/div/div/div/table/tbody/tr/td/select/option')
    product_type_button = WebDriverWait(wd, 10).until(EC.element_to_be_clickable(product_type_button_locator))
    product_type_button.click()

XXXIsr 发表于 2024-4-18 20:11:37

页: [1]
查看完整版本: Python程序中selenium-click动作失效问题求解