python - 这是功能还是错误?Windows 10 python time.sleep() 挂起时时钟翻转到午夜
问题描述
蟒蛇 3.6.7
我有一个带有 while 循环的 selenium刮板脚本,用于测试要更新的页面内容。如果页面未更改,则初始休眠 5 秒,然后休眠 1 秒。我经常发现这个脚本停止运行,最后一次输出到文件的数据是在午夜之前。我必须通过按 ctrl-C 来终止脚本,它始终time.sleep()
是出现在回溯中的脚本之一。每页列出 12 个项目,然后通过脚本单击“下一步”按钮加载下一页。如果少于 12 个项目或没有“下一步”按钮,则它已到达列表的末尾并重新开始。
import time
many lines of page load and site login code
n = 0 #page counter
nx = True
bait_ids = ['dummy']
old_ids = ['dummy']
tg = True
while tg:
while nx:
n = n + 1
time.sleep(5)
# Selenium hands the page source to Beautiful Soup
while (list_ids == old_ids):
time.sleep(1)
soup_page = BeautifulSoup(driver.page_source, 'lxml')
list_ids = soup_page.find_all("div", {"class": "dec"})
old_ids = list_ids
print(len(list_ids)," ", end="")
....
scrape 10 data attributes for each list_ids
append list_ids and data to text file
....
if (len(list_ids) != 12):
nx = False
if nx:
try:
next_btn = driver.find_element_by_css_selector('a.next')
next_btn.click()
except NoSuchElementException:
if nx:
nx = False
来自 ctrl-C 的示例回溯,它有 12 个 list_ids,然后在time.sleep(1)
.
12 Traceback (most recent call last):
File "lf7.py", line 265, in <module
time.sleep(1)
KeyboardInterrupt
解决方案
考虑到这个错误不是由time
模块引起的。您已经在使用time.sleep(5)
上面的代码,并且您的代码不会在其中停滞不前。
但是,似乎是问题所在的行在while
语句中:
while (list_ids == old_ids):
time.sleep(1)
soup_page = BeautifulSoup(driver.page_source, 'lxml')
list_ids = soup_page.find_all("div", {"class": "dec"})
如果始终满足此循环的条件,则通常停止它会使它看起来像是睡眠问题,而在执行退出循环的条件时更有可能出现问题。
抓取网站时可能出现其他问题,使其停滞不前。没有足够的关于被抓取网站的信息,但是如果你正在抓取第三方的网站,他们可能会阻止你抓取它们,因为所有这些代码都在多个 while 循环中,并且不断的 selenium 请求可能看起来像垃圾邮件。
推荐阅读
- mysql - 为多个表创建触发器
- angular - aws cognito 登录时未发送经过验证的设备进行 2 因素身份验证
- python - 在解析 TVP 时在 pyodbc 中将 None 转换为 Null
- azure-storage - 通过 azure databox 在存储帐户中加载文件是否会导致存储帐户中的读取下降
- reactjs - 打印 Plotly Dash 创建的 webApp 时,如何将选项卡保持在同一行?
- microsoft-teams - 与访客用户(不同域)打开 MS Teams 聊天的深度链接
- highcharts - 如何在 highchart 工具提示中设置滚动条?
- reactjs - 如何在反应中选择的选项标签中获取api响应?
- ruby-on-rails - 在嵌套引擎中使用活动模型序列化程序的 Rspec 测试未通过
- javascript - ReactJS 中的 useHistory 函数