我正在尝试使用Selenium查看一个网页上的几个页面 - PhantomJS()
。
问题是它开始冻结,我无法弄清楚原因。这可能与Timeout有关。
这是类的__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()
但是我无法意识到因为它没有引发任何异常。
你能给我一个建议吗?
答案 0 :(得分:0)
我对硒在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()是否确实存在问题。如果有任何错误,您可以逐个运行它来指出它。希望这会有所帮助...