【发布时间】:2014-10-13 06:45:19
【问题描述】:
我编写了这个简单的脚本——它只是从博文中获取一张图片并将其发布到 Pinterest。它工作得很好,除了大约 43 页后,浏览器挂起/冻结。
我想知道是否存在某种“泄漏”导致事情失控?也许我可以在脚本中更改一些内容以使其运行而不会崩溃?
这是我的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pickle
import os.path
import time
driver = webdriver.Firefox()
#START THE RACE
driver.get("https://www.pinterest.com/login/")
assert "Pinterest" in driver.title
#name
elem = driver.find_element_by_name("username_or_email")
elem.send_keys("someone@something.com")
#pass
elem = driver.find_element_by_name("password")
elem.send_keys("12345")
elem.send_keys(Keys.RETURN)
time.sleep(5)
new_url = 'something.com/something_else'
driver.get(new_url)
i=0
while(1):
i=i+1
print i
time.sleep(5)
driver.find_element_by_css_selector(".pin-it-btn-wrapper a").click();
time.sleep(3)
try:
driver.find_element_by_css_selector('[data-pin-index="0"]').click();
except:
driver.find_element_by_css_selector("#prev_post a").click();
time.sleep(3)
handles = driver.window_handles
if(handles):
for handle in handles:
driver.switch_to_window(handle)
try:
driver.find_element_by_css_selector('button.pinIt').click();
time.sleep(2)
except:
continue
time.sleep(3)
if(handles):
for handle in handles:
driver.switch_to_window(handle)
try:
time.sleep(1)
driver.find_element_by_css_selector("#prev_post a").click();
time.sleep(3)
break
except:
continue
#assert "No results found." not in driver.page_source
#driver.close()
脚本本身登录到 pinterest,转到给定站点,并开始抓取博客文章的“上一篇文章”链接 - 按下“Pin it”按钮,选择图片,确认(单独的窗口)然后跳转回主窗口并开始另一个页面。
如前所述,我认为某处可能存在“泄漏”,导致它在一段时间后磨成一团。
【问题讨论】:
-
您使用的是哪个 selenium 和 firefox 版本?
-
好像是selenium-2.39.0,最新的firefox
-
我很确定问题出在多个
sleep调用中 - 最好使用 selenium waits,但是,对于初学者,请将您的 selenium 包升级到最新版本(如果我是 2.43.*没记错)。 -
升级是否意味着重写我所有的代码?注意到“等待”功能
-
更新:我改为等待更新,但现在我必须做一些重写。感谢您的帮助。