我正在尝试使用Selenium - PhantomJS()在一个网站上查看多个页面。问题是它开始结冰了,我不知道为什么。这可能是与超时有关。
下面是一个类的__init__方法。
self.driver = webdriver.PhantomJS(service_args=["--load-images=false"])
self.wait = WebDriverWait(self.driver, 2)下面是方法:
def click_next_page(self):
log('click_next_page : '+self.driver.current_url) # THIS LINE RUNS
rep = 0
while 1:
try:
self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'li.arr-rgt.active a'))) # IT MAY FREEZE HERE
self.driver.find_element_by_css_selector('li.arr-rgt.active a').click()# IT MAY FREEZE HERE
print 'NEXT' # DOESNT PRINT ANY TEXT SO THIS LINE NOT EXECUTED
log('NEXT PAGE')
return True
except Exception as e:
log('click next page EXCEPTION') # DONT HAVE THIS TEXT IN MY LOG SO IT DOES NOT RAISES ANY EXCEPTION
self.driver.save_screenshot('click_next_page_exception.png')
self.driver.back()
self.driver.forward()
rep += 1
log('REPEAT '+str(rep))
if rep>4:
break
sleep(4)
return False问题是它没有引发任何异常或任何消息。行log('click_next_page : '+self.driver.current_url)工作,然后它冻结,我知道这一点,因为我在我的日志中有click_next_page : http://....作为最后一行。
问题肯定出在这里的某个地方:
self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'li.arr-rgt.active a')))
self.driver.find_element_by_css_selector('li.arr-rgt.active a').click()但我不知道它在哪里,因为它没有引发任何异常。
你能给我一个建议吗?
发布于 2015-07-31 16:41:37
我对Selenium在PhantomJS中的工作原理一无所知。但是,我在您的代码中没有看到任何问题。为了帮助您了解确切的问题,我建议您以较小的块进行调试,并在控制台中一次使用一行(而不是通过运行python文件)。
所以检查一下这个:-
>>> from selenium import webdriver
>>> driver = webdriver.PhantomJS(service_args=["--load-images=false"])
>>> wait = WebDriverWait(driver, 2)
>>> code for clicking next page
>>> time.sleep(5)
>>> driver.find_element_by_css_selector('li.arr-rgt.active a')因此,这应该返回使用css选择器搜索的对象的selenium webdriver实例。如果没有找到元素本身,那么它将抛出错误。
如果上面的代码运行,则重新运行上面的代码,并进行以下修改:
>>> from selenium import webdriver
>>> driver = webdriver.PhantomJS(service_args=["--load-images=false"])
>>> wait = WebDriverWait(driver, 2)
>>> code for clicking next page
>>> wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'li.arr-rgt.active a')))
>>> driver.find_element_by_css_selector('li.arr-rgt.active a').click()在这里,您将能够检查wait_until()是否确实存在问题。如果有任何错误,您可以通过逐个运行来指出。希望这能帮到你。
https://stackoverflow.com/questions/31723559
复制相似问题