Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium只单击一次链接,再次调用click()返回错误_Python_Selenium_Screen Scraping - Fatal编程技术网

Python Selenium只单击一次链接,再次调用click()返回错误

Python Selenium只单击一次链接,再次调用click()返回错误,python,selenium,screen-scraping,Python,Selenium,Screen Scraping,我是Selenium的新手,刚刚编写了这些代码。我想通过单击右下角的“>”链接来删除表上的数据。第一次点击有效,但下两次不行。我错过了什么?谢谢 # coding: utf-8 from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Firefox() browser.get('http://s.cafef.vn/Lich-su-giao-dich-HSG-1.

我是Selenium的新手,刚刚编写了这些代码。我想通过单击右下角的“>”链接来删除表上的数据。第一次点击有效,但下两次不行。我错过了什么?谢谢

# coding: utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Firefox()
browser.get('http://s.cafef.vn/Lich-su-giao-dich-HSG-1.chn')

next_page_link = browser.find_element_by_partial_link_text('>')
next_page_link.click()
next_page_link = browser.find_element_by_partial_link_text('>')
next_page_link.click()
next_page_link = browser.find_element_by_partial_link_text('>')
next_page_link.click()
这是个例外

Traceback (most recent call last):
  File "cafef.py", line 13, in <module>
    next_page_link.click()
  File "/usr/local/lib/python2.7/dist-packages/selenium-2.40.0-py2.7.egg/selenium/webdriver/remote/webelement.py", line 59, in click
    self._execute(Command.CLICK_ELEMENT)
  File "/usr/local/lib/python2.7/dist-packages/selenium-2.40.0-py2.7.egg/selenium/webdriver/remote/webelement.py", line 369, in _execute
    return self._parent.execute(command, params)
  File "/usr/local/lib/python2.7/dist-packages/selenium-2.40.0-py2.7.egg/selenium/webdriver/remote/webdriver.py", line 164, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium-2.40.0-py2.7.egg/selenium/webdriver/remote/errorhandler.py", line 164, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: u'Element is no longer attached to the DOM' ; Stacktrace: 
    at fxdriver.cache.getElementAt (resource://fxdriver/modules/web_element_cache.js:7613)
    at Utils.getElementAt (file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:7210)
    at fxdriver.preconditions.visible (file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:8223)
    at DelayedCommand.prototype.checkPreconditions_ (file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:10861)
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:10878)
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:10883)
    at DelayedCommand.prototype.execute/< (file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:10825) 
回溯(最近一次呼叫最后一次):
文件“cafef.py”,第13行,在
下一页链接。单击()
文件“/usr/local/lib/python2.7/dist packages/selenium-2.40.0-py2.7.egg/selenium/webdriver/remote/webelement.py”,第59行,单击
self.\u执行(命令。单击\u元素)
文件“/usr/local/lib/python2.7/dist packages/selenium-2.40.0-py2.7.egg/selenium/webdriver/remote/webelement.py”,第369行,在
返回self.\u parent.execute(命令,参数)
文件“/usr/local/lib/python2.7/dist packages/selenium-2.40.0-py2.7.egg/selenium/webdriver/remote/webdriver.py”,执行中第164行
self.error\u handler.check\u响应(响应)
文件“/usr/local/lib/python2.7/dist packages/selenium-2.40.0-py2.7.egg/selenium/webdriver/remote/errorhandler.py”,第164行,在check_响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.StaleElementReferenceException:消息:u'Element不再附加到DOM';堆栈跟踪:
在fxdriver.cache.getElementAt(resource://fxdriver/modules/web_element_cache.js:7613)
at Utils.getElementAt(file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:7210)
在fxdriver.premissions.visible(file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:8223)
在DelayedCommand.prototype.CheckPremissions\u(file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:10861)
在DelayedCommand.prototype.executeInternal\uh处(file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:10878)
在DelayedCommand.prototype.executeInternal\u(file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:10883)
在DelayedCommand.prototype.execute/<(file:///tmp/tmpIDOSdW/extensions/fxdriver@googlecode.com/components/command_processor.js:10825)

第二个
下一页链接。单击()
调用在浏览器加载下一页之前发生。 添加一个包含以下内容的文件:


通常,来自unutbu的anwser就足够了。

我在.net中使用了selenium,而不是python,因此我无法给出python的详细代码,但对于stable,您应该等待3次:

  • 等待下一页或加载ajax内容,在这种情况下,您应该等到
    .CafeF\u Paging td span strong的文本是您不包括的页码。
  • 等待jquery加载,直到jquery.active==0
    退房
  • 等待元素可见,而不是仅定位,使用元素的可见性
  • from selenium import webdriver
    import selenium.webdriver.support.ui as UI
    from selenium.webdriver.common.by import By
    import selenium.webdriver.support.expected_conditions as EC 
    import contextlib
    
    with contextlib.closing(webdriver.Firefox()) as browser:
        browser.get('http://s.cafef.vn/Lich-su-giao-dich-HSG-1.chn')
        wait = UI.WebDriverWait(browser, 10)
        for i in range(3):            
            next_page_link = wait.until(
                EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, '>')))
            next_page_link.click()