我写了这个简单的脚本 - 它只是从博客中提取图像并将其发布到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"按钮,选择图像,确认(单独窗口)然后跳回主窗口并启动另一页。
如上所述,我认为可能存在泄漏问题。在某个地方,它会在一段时间后引起轰动。
答案 0 :(得分:0)
根据评论者的建议,只需更改每个实例:
time.sleep(3)
到
driver.implicitly_wait(3)
似乎有所帮助。我也更新到最新版本。