【问题标题】:Browser Crashes in Page Retrieving Loop, Python Selenium Script页面检索循环中的浏览器崩溃,Python Selenium 脚本
【发布时间】: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.*没记错)。
  • 升级是否意味着重写我所有的代码?注意到“等待”功能
  • 更新:我改为等待更新,但现在我必须做一些重写。感谢您的帮助。

标签: python selenium webdriver


【解决方案1】:

根据评论者的建议,只需更改以下每个实例:

time.sleep(3)

driver.implicitly_wait(3)

似乎有所帮助。我也更新到最新版本。

【讨论】:

  • 你只需要声明一次......并且不需要替换“time.sleep(3)”
猜你喜欢
  • 2012-06-07
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
相关资源
最近更新 更多