鱼C论坛

 找回密码
 立即注册
查看: 36|回复: 3

请假大神ChromiumPage的ele 和click功能

[复制链接]
发表于 昨天 23:40 | 显示全部楼层 |阅读模式
20鱼币
我想基于ChromiumPage 点击下图中红框中的辽宁 字段,对应的class为
  1. ui-switchable-item ui-area-current
复制代码
,但我的代码也没有报错,也没有实现点击
b8df3ba9-eebe-49a3-b92c-378cd201dd59.png

  1. from DrissionPage import ChromiumPage, ChromiumOptions
  2. import time
  3. # 创建一个 DrissionPage 实例
  4. # ChromiumOptions().set_browser_path(r'c:/Program Files/Google/Chrome/Application/chrome.exe').save()  # 使用原始字符串避免转义问题
  5. dp = ChromiumPage()

  6. dp.listen.start("api.m.jd.com/?appid=pc-item-soa")
  7. dp.get("https://item.jd.com/100051636820.html")
  8. time.sleep(3)
  9. # dp.get("https://item.jd.com/100110932836.html")
  10. resp = dp.listen.wait()
  11. json = resp.response.body
  12. print(json['stockInfo']['promiseInfoText'])



  13. print("尝试点击类名为 'ui-area-text-wrap' 的  元素...")
  14. try:
  15.     area_element = dp.ele('.ui-area-text-wrap')
  16.     area_element.click()
  17.     print("成功点击了地址选择器元素")
  18.     time.sleep(3)  # 等待点击后的操作完成
  19. except Exception as e:
  20.     print(f"点击元素时出错: {e}")
  21. #####################下面的点击没有生效,但也没有被try except捕获
  22. print("尝试点击类名为 'ui-switchable-item ui-area-current' 的  元素...")
  23. try:
  24.     area_element = dp.ele('.ui-switchable-item ui-area-current')
  25.     area_element.click()
  26.     print("成功点击了地址选择器元素")
  27.     time.sleep(3)  # 等待点击后的操作完成
  28. except Exception as e:
  29.     print(f"点击元素时出错: {e}")
复制代码

cb747a20-ef74-4651-b10d-7a496084a0c6.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 23:41 | 显示全部楼层
您好!您遇到的问题很可能是因为 CSS 选择器写法有误。在第二个点击尝试中,您使用的选择器是 .ui-switchable-item ui-area-current,但中间的空格表示“后代元素关系”,而您实际需要的是匹配“同时具有这两个类名的元素”。

以下是具体分析和解决方案:

问题分析:
- 选择器 .ui-switchable-item ui-area-current 会被解析为:查找类名为 ui-switchable-item 的元素内,类名为 ui-area-current 的子元素。这很可能匹配不到目标元素。
- 正确写法应该是 .ui-switchable-item.ui-area-current(类名之间用点号连接且无空格),表示匹配同时具有这两个类名的元素。

解决方案:
1. 修改选择器为无空格的形式。
2. 如果元素是动态加载的,可以增加等待时间或使用 .ele() 的超时参数确保元素加载完成。

修改后的代码示例:

  1. print("尝试点击类名为 'ui-switchable-item ui-area-current' 的元素...")
  2. try:
  3.     # 使用正确的选择器:去掉空格,用点号直接连接类名
  4.     area_element = dp.ele('.ui-switchable-item.ui-area-current')
  5.     if area_element:
  6.         area_element.click()
  7.         print("成功点击了目标元素")
  8.         time.sleep(3)
  9.     else:
  10.         print("未找到目标元素,请检查选择器或页面加载状态")
  11. except Exception as e:
  12.     print(f"点击元素时出错: {e}")
复制代码


额外建议:
- 如果页面元素是动态生成的,建议使用 dp.ele() 的超时参数,例如 dp.ele('.ui-switchable-item.ui-area-current', timeout=10) 等待最多10秒。
- 通过浏览器开发者工具(F12)检查元素是否确实具有这些类名,并确认无其他遮挡或交互依赖。

希望这能帮到您!如有其他问题,请随时追问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 6 小时前 | 显示全部楼层
FishC 发表于 2025-11-7 23:41
您好!您遇到的问题很可能是因为 CSS 选择器写法有误。在第二个点击尝试中,您使用的选择器是 .ui-switchab ...


您好,我用检查元素时,确实class是这个,但是我的代码却走了else的分支,打印了“未找到地址选择器元素”
  1. print("尝试点击类名为 'ui-switchable-item ui-area-current' 的  元素...")
  2. try:
  3.     area_element = dp.ele('.ui-switchable-item.ui-area-current',timeout=10)
  4.     if area_element:
  5.         area_element.click()
  6.         print("成功点击了地址选择器元素")
  7.         time.sleep(3)  # 等待点击后的操作完成
  8.     else:
  9.         print("未找到地址选择器元素")
  10. except Exception as e:
  11.     print(f"点击元素时出错: {e}")
复制代码

137bd413-07b8-4082-9fa8-c0beeb45516c.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 6 小时前 | 显示全部楼层
13691255250 发表于 2025-11-08 01:07
FishC 发表于 2025-11-7 23:41
您好!您遇到的问题很 ...


您好!如果代码走了else分支,说明元素确实没有找到。这通常有几个可能的原因:

1. 元素尚未加载完成
2. 元素在iframe中
3. 类名是动态变化的
4. 选择器需要更精确

建议您尝试以下调试方法:


  1. # 方法1:增加等待时间,确保元素加载完成
  2. print("等待元素加载...")
  3. time.sleep(5)  # 增加等待时间

  4. # 方法2:打印页面上所有包含相关类名的元素
  5. print("查找所有相关元素:")
  6. elements = dp.eles('.ui-switchable-item')
  7. print(f"找到 {len(elements)} 个 ui-switchable-item 元素")

  8. for i, ele in enumerate(elements):
  9.     print(f"元素 {i}: {ele.attr('class')}")

  10. # 方法3:尝试使用更通用的选择器
  11. print("尝试使用不同选择器:")
  12. element1 = dp.ele('class:ui-switchable-item')
  13. element2 = dp.ele('class:ui-area-current')

  14. print(f"ui-switchable-item 元素: {element1 is not None}")
  15. print(f"ui-area-current 元素: {element2 is not None}")

  16. # 方法4:使用XPath选择器
  17. element_xpath = dp.ele('xpath://*[contains(@class, "ui-switchable-item") and contains(@class, "ui-area-current")]')
  18. print(f"XPath找到元素: {element_xpath is not None}")
复制代码


另外,请检查:
- 页面是否有iframe需要切换
- 元素是否在弹窗或下拉菜单中需要先触发显示
- 浏览器窗口是否足够大,元素是否在可视区域内

您可以通过打印更多调试信息来定位问题所在。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-8 07:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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