Error: presence_of_element_located() takes 1 positional argument but 2 were given Traceback (most recent call last): File "D:\software\Anaconda3\envs\datacrawl\lib\site-packages\urllib3\connection.py", line 199, in _new_conn sock = connection.create_connection( File "D:\software\Anaconda3\envs\datacrawl\lib\site-packages\urllib3\util\connection.py", line 85, in create_connection raise err File "D:\software\Anaconda3\envs\datacrawl\lib\site-packages\urllib3\util\connection.py", line 73, in create_connection sock.connect(sa) ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "D:\software\Anaconda3\envs\datacrawl\lib\site-packages\urllib3\connectionpool.py", line 789, in urlopen response = self._make_request( File "D:\software\Anaconda3\envs\datacrawl\lib\site-packages\urllib3\connectionpool.py", line 495, in _make_request conn.request( Fil
时间: 2025-06-24 08:37:22 浏览: 17
### 解析 `for i in range(0, 10)` 的作用
`for i in range(0, 10)` 是一个标准的 Python 循环结构,其中 `range(0, 10)` 创建了一个从 0 到 9 的整数序列。该循环的主要功能是在每次迭代中执行一段代码块共十次。在此上下文中,它的目的是连续滚动页面到底部以加载更多动态内容[^1]。
```python
for i in range(0, 10):
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
time.sleep(4)
```
在这段代码里,每一次循环都通过 JavaScript 执行命令使浏览器窗口向下滚动到最底部,并暂停四秒钟以便新数据能够完全加载出来。这种技术经常应用于那些采用无限滚动方式显示更多信息的网站上。
---
### 关于 `WebDriverWait(driver, 20).until(...)` 参数的意义
在表达式 `WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CLASS_NAME, 'hosetitem-dec')))` 中,“20”指的是最大等待时间(单位为秒)。这意味着 WebDriver 将最多花费二十秒钟去寻找具有类名为 `'hosetitem-dec'` 的元素。一旦找到符合条件的目标或者超过了设定的时间限度,则停止进一步尝试并返回相应结果或引发异常[^2]。
下面是关于这部分的具体描述:
- **driver**:传入的 Web 驾驶员实例。
- **timeout (20 seconds)**:设置的最大超时期限。如果在此时间内未能成功定位所需元素,则抛出 TimeoutException 异常。
- **method (.until())**:接受一个可调用对象作为参数,当这个回调函数返回 True 值时立即结束等待过程。
示例代码如下所示:
```python
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
try:
element = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CLASS_NAME, "hosetitem-dec"))
)
except Exception as e:
print(f"An error occurred: {str(e)}")
finally:
driver.quit()
```
在这里我们设置了长达20秒的延时来确认是否有匹配项存在;如果没有发现任何对应的选择器,则打印错误消息并且关闭浏览会话。
---
### presence_of_element_located 方法参数错误的原因分析及其修正方案
如果遇到 `presence_of_element_located()` 报错的情况,通常是由于传递给它的元组格式不对造成的。按照官方文档的要求,应该向其提供由两个部分组成的元组——第一个是定位策略 (`By`) ,第二个是要查找的实际值字符串形式。例如 `(By.ID, "some_id")`, `(By.CLASS_NAME, "a_class_name")`.
如果你遇到了类似这样的报错信息:“TypeError: __init__() takes exactly 2 arguments”,那很可能是因为你在创建 tuple 的时候少写了一层括号或者是其他语法上的失误所致。正确的做法应该是像这样书写:
```python
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "correct-class-name")) # 注意这里额外加了个外层的小括号
)
```
另外还需要注意的是确保所选属性确实存在于 DOM 结构之中,并且拼写的名称要精确无误,大小写字母都要严格区分对待。
---
### ConnectionRefusedError 错误原因及解决办法
当运行基于 Selenium 的程序时报出了 “ConnectionRefusedError” 这样的提示语句的时候,往往意味着无法建立同远程服务器之间的连接关系。这种情况的发生可能源于以下几个方面原因之一:
1. **ChromeDriver 版本与本地安装版本不符**
- 确认 chrome 浏览器和 chromedriver 是否保持最新同步状态。可以通过访问 [Chromedriver Downloads](https://sites.google.com/a/chromium.org/chromedriver/downloads) 页面下载适合您系统的驱动文件。
2. **端口占用冲突**
- 查看是否已有进程占用了默认启动所需的端口号(一般为 9515),如果是的话更改配置避免重复分配即可解决问题。
3. **防火墙/杀毒软件拦截请求**
- 检查计算机的安全防护措施有没有阻止外部链接行为发生的现象出现。临时禁用它们测试一下效果如何。
4. **网络状况不稳定**
- 如果处于较差质量下的互联网环境下工作也可能引起此类现象产生。建议切换至更加可靠的线路重新试验一番看看情况是否会有所改善。
最后附带完整的示范代码供参考学习:
```python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
service = Service('./chromedriver') # 替换为你实际存放的位置路径
options = webdriver.ChromeOptions()
with webdriver.Chrome(service=service, options=options) as driver:
try:
wait = WebDriverWait(driver, 20)
url = "http://example.com"
driver.get(url)
elem_answer = wait.until(
EC.presence_of_element_located((By.XPATH, '//div[@class="line-feed"]'))
)
print(elem_answer.text)
except Exception as err:
print("Error:", str(err))
finally:
driver.quit()
```
阅读全文
相关推荐

















