我正在使用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))