|
发表于 2024-6-19 14:16:02
|
显示全部楼层
听上去你遇到的问题跟JavaScript选择器找不到元素有关。导致这个错误的原因可能有以下几点:
1. 选择器 `.ivu-input ivu-input-default` 找到多个元素,你需要更精确地定位。
2. JavaScript 在执行时,元素未加载完全。
3. 使用的选择器不匹配。
### 定位与调试
首先,我们要确保选择器是正确的,然后再触发事件。为了更好地找到特定的元素,我们可以通过唯一ID或者更具体的CSS选择器来实现。
以下是你的代码的修正和优化版本:
- from drission import DrissionPage
- # 初始化 DrissionPage,使用 Chrome 浏览器
- page = DrissionPage()
- # 打开目标网页
- page.get('https://example.com') # 请替换为实际网址
- # 定位主元素并找到相关的输入框
- main_ele = page.ele('.login-card-wrapper .content .company-mode')
- login_eles = main_ele.eles('.ivu-input.ivu-input-default')
- # 假设按顺序 company, user, pwd 分别是第一个、第二个、第三个
- company_ele = login_eles[0]
- user_ele = login_eles[1]
- pwd_ele = login_eles[2]
- # 输入公司名到 company_ele
- company = "FishC公司" # 请替换为实际内容
- company_ele.input(company)
- # 在 company_ele 上触发输入事件
- company_ele.run_js("""
- var event = new Event('input', { bubbles: true });
- this.dispatchEvent(event);
- """)
- # 模拟输入一个空格,这里需要确保元素调取方法正确
- company_ele.run_js("""
- this.value += ' ';
- var event = new Event('input', { bubbles: true });
- this.dispatchEvent(event);
- """)
复制代码
### 解释
1. `main_ele = page.ele('.login-card-wrapper .content .company-mode')`: 确保选择器能准确找到元素。
2. `login_eles = main_ele.eles('.ivu-input.ivu-input-default')`: 这里用到更具体的选择器,如果多个class name中间应该点号而不是空格。
3. 通过索引获取 `company_ele`, `user_ele`, 和 `pwd_ele`。
4. 在输入完内容后,直接在元素上触发 `input` 事件和模拟的空格添加。
### 可能的问题和解决方案
1. **元素未加载完成**:可以加入一些等待时间,确保页面元素完全加载。
2. **选择器不准确**:检查网页源码,确保选择器符合实际元素结构。
3. **JavaScript错误**:可以通过浏览器控制台逐步测试JavaScript,以确保正确性。
希望这次能帮助你解决问题,如果还有其他疑问或需要进一步的帮助,请继续提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|