首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium WebDriverWait无法正常工作?

Selenium WebDriverWait无法正常工作?
EN

Stack Overflow用户
提问于 2015-07-30 20:16:12
回答 1查看 724关注 0票数 2

我正在尝试使用Selenium - PhantomJS()在一个网站上查看多个页面。问题是它开始结冰了,我不知道为什么。这可能是与超时有关。

下面是一个类的__init__方法。

代码语言:javascript
复制
self.driver = webdriver.PhantomJS(service_args=["--load-images=false"])
self.wait = WebDriverWait(self.driver, 2)

下面是方法:

代码语言:javascript
复制
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://....作为最后一行。

问题肯定出在这里的某个地方:

代码语言:javascript
复制
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()

但我不知道它在哪里,因为它没有引发任何异常。

你能给我一个建议吗?

EN

回答 1

Stack Overflow用户

发布于 2015-07-31 16:41:37

我对Selenium在PhantomJS中的工作原理一无所知。但是,我在您的代码中没有看到任何问题。为了帮助您了解确切的问题,我建议您以较小的块进行调试,并在控制台中一次使用一行(而不是通过运行python文件)。

所以检查一下这个:-

代码语言:javascript
复制
>>> 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实例。如果没有找到元素本身,那么它将抛出错误。

如果上面的代码运行,则重新运行上面的代码,并进行以下修改:

代码语言:javascript
复制
 >>> 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()是否确实存在问题。如果有任何错误,您可以通过逐个运行来指出。希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31723559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档