wxpython GUI在运行selenium web驱动程序时冻结

时间:2014-12-22 20:47:07

标签: python multithreading selenium

我正在使用Selenium使用WXPython和Web Scraping学习GUI设计。我制作了一个小工具,当我点击“开始”按钮时,它将从网站收集数据,计算数字并将结果打印回GUI。 GUI的底部有statusBar,用于显示Web浏览器的状态。

因为浏览器必须浏览5个不同的页面来获取所有数字,所以我想在状态栏上显示“收集第1页”,“收集第2页”等...

问题是,我的GUI只是在浏览器位于第1页时冻结,状态页面在“收集第1页”时冻结。如果我单击GUI,则其状态为“无响应”。但是,当浏览器完成并关闭时,我得到了我的结果,GUI恢复正常。 (状态栏显示“收集第4页”)

由于我还在学习,这是我第一次这样做,我应该研究哪些知识,或者如何让它们同时正常运行?意味着浏览器仍在擦除数据,GUI仍显示statusBar的消息(收集第1页,收集第2页等等)。

非常感谢你!

更新:我读过有关线程和多线程的内容,那些是我应该研究的内容吗?

运行时间大约需要12-15秒,我得到了正确的结果,但GUI在此过程中冻结。 我有我的MainGUI.MainFrame,它包含GUI,这里是TestGUI类: 每个页面包含数千个数据,我需要对它们进行一些计算。

class TestGUI:
    def __init__(self,parent):
        MainGUI.MainFrame.__init__(self,parent)
        self.statusBar.SetStatusText("Ready to scrape")

    # Button start
    def Start(self, event):
        self.statusBar.SetStatusText("Starting ...")

        driver = webdriver.Firefox()
        driver.get("http://127.0.0.1/customerdata/")
        element = driver.find_element_by_name("customer-id")
        self.statusBar.SetStatusText("Collecting page 1")
        // do something
        element = driver.find_elements_by_partial_link_text("Page 2")
        element[0].click();
        element = driver.find_element_by_name("customer-id")
        self.statusBar.SetStatusText("Collecting page 2")
        // do somthing 
        ....
        // same thing with page 3 and page 4
        self.statusBar.SetStatusText("result:" + str(result))

0 个答案:

没有答案