Traceback (most recent call last): File "C:\Users\niuxi\pythonProject\main.py", line 18, in <module> more_btn = WebDriverWait(edge, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".rev-more a"))) File "D:\元气壁纸缓存\lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message: Stacktrace: Backtrace: GetHandleVerifier [0x00007FF6E502AEC2+64226] Microsoft::Applications::Events::EventProperty::~EventProperty [0x00007FF6E4FBC082+765362] (No symbol) [0x00007FF6E4D7CC4C] (No symbol) [0x00007FF6E4DC0BDF] (No symbol) [0x00007FF6E4DC0D6A] (No symbol) [0x00007FF6E4DFAC17] (No symbol) [0x00007FF6E4DDF03F] (No symbol) [0x00007FF6E4DB4BB1] (No symbol) [0x00007FF6E4DF7FC1] (No symbol) [0x00007FF6E4DDEDD3] (No symbol) [0x00007FF6E4DB3BEC] (No symbol) [0x00007FF6E4DB2DD6] (No symbol) [0x00007FF6E4DB4364] Microsoft::Applications::Events::ILogManager::DispatchEventBroadcast [0x00007FF6E52087C9+1319033] (No symbol) [0x00007FF6E4E2D2A8] Microsoft::Applications::Events::EventProperty::~EventProperty [0x00007FF6E4F095E1+33553] Microsoft::Applications::Events::EventProperty::~EventProperty [0x00007FF6E4F01A1F+1871] Microsoft::Applications::Events::ILogManager::DispatchEventBroadcast [0x00007FF6E52073E3+1313939] Microsoft::Applications::Events::ILogConfiguration::operator* [0x00007FF6E4FC46B8+20232] Microsoft::Applications::Events::ILogConfiguration::operator* [0x00007FF6E4FC0CD4+5412] Microsoft::Applications::Events::ILogConfiguration::operator* [0x00007FF6E4FC0DCC+5660] Microsoft::Applications::Events::EventProperty::~EventProperty [0x00007FF6E4FB4A81+735153] BaseThreadInitThunk [0x00007FFEC68526AD+29] RtlUserThreadStart [0x00007FFEC802AA68+40]
时间: 2024-02-03 18:04:23 浏览: 193
浅谈Python traceback的优雅处理
这个错误是由于等待超时引起的。可能是由于页面加载时间较长或者元素没有出现导致的。
您可以尝试增加等待时间,或者使用其他等待条件来等待元素的出现。另外,还可以尝试使用`visibility_of_element_located`条件来等待元素的出现。
以下是修改后的代码示例:
```python
import time
import openpyxl
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
url = "https://www.mafengwo.cn/poi/16790.html"
edge = webdriver.Edge()
edge.get(url)
comments_data = []
# 等待页面加载完成
time.sleep(5)
# 点击展开更多评论按钮
more_btn = WebDriverWait(edge, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".rev-more a")))
edge.execute_script("arguments[0].click();", more_btn)
time.sleep(2)
# 循环获取点评信息
while True:
# 获取页面源码
html = edge.page_source
soup = BeautifulSoup(html, "html.parser")
# 获取每条点评的信息
reviews = soup.select(".rev-item")
for review in reviews:
# 获取点评内容
content = review.select_one(".rev-txt").get_text().strip()
print("点评内容:", content)
# 获取点评时间
date = review.select_one(".time").get_text().strip()
print("点评时间:", date)
# 获取点评用户
user = review.select_one(".name").get_text().strip()
print("点评用户:", user)
# 获取点评评分
score = review.select_one(".score span").get_text().strip()
print("点评评分:", score)
print("-----------------------------")
comments_data.append([content, date, user, score])
# 翻页操作
next_btn = edge.find_element("css selector", ".pg-next")
if next_btn.get_attribute("class") == "pg-next":
edge.execute_script("arguments[0].click();", next_btn)
time.sleep(2)
else:
break
# 将爬取的点评信息存入comments.xlsx文件中
wb = openpyxl.Workbook()
ws = wb.active
ws.append(["点评内容", "点评时间", "点评用户", "点评评分"])
for data in comments_data:
ws.append(data)
wb.save("comments.xlsx")
wb.close()
# 关闭浏览器
edge.quit()
```
在这个示例中,我使用了`WebDriverWait`类和`EC.visibility_of_element_located`条件来等待更多评论按钮的可见性。`WebDriverWait`类会等待一个特定条件的满足,直到最大等待时间达到或条件满足为止。
希望这次修改能解决问题。如果您有任何其他问题,请随时提问。
阅读全文