Skip to main content
 首页 » 编程设计

Python Selenium Javascript 链接点击执行失败

2024年11月01日30artech

我将 Selenium for Python 与 PhantomJS Ghost Driver 一起使用,以便单击 href 中包含 Javascript 的链接,例如来自 this 的链接。关联。我可以将链接作为一个元素很好地获取,但是当我尝试单击它时,出现了问题。这是一些代码(注意 - url 是一个列表,其中第一个元素是 Jscript 链接,第二个是链接文本)

def get_jscript_down(self,url): 
    driver = webdriver.PhantomJS() 
    print(self.exact_url) 
    driver.get(self.exact_url) 
    elements = driver.find_elements_by_tag_name("a") 
    for ele in elements: 
        if ele.text == url[1].encode("utf-8").replace("  "," "): 
            break 
    ele.click() 
    print("Cannot yet download %s" % url) 
 
    return False 

除 ele.click() 外,一切正常。当我执行它时,我得到一个丑陋的 WebDriverException。

selenium.common.exceptions.WebDriverException: 消息:u'Error Message =>\'Click failed: ReferenceError: Can\'t find variable: __doPostBack\'\n caused by Request => {"headers":{"Accept": "application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"81","Content-Type":"application/json;charset=UTF-8 ","Host":"127.0.0.1:34441","User-Agent":"Python-urllib/2.6"},"httpVersion":"1.1","method":"POST","post":"{\"sessionId\":\"71c20b50-ca21-11e2-a03c-f58c49e5a1bc\",\"id\":\":wdc:1370025577147\"}","url":"/click","urlParsed":{" anchor ":"","查询":"","文件":"点击","目录":"/","路径":"/点击","相对":"/点击", "端口":"","主机":"","密码":"","用户":"","用户信息":"","权限":"","协议(protocol)":"","source":"/click","queryKey":{},"chunks":["click"]},"urlOriginal":"/session/71c20b50-ca21-11e2-a03c-f58c49e5a1bc/element/%3Awdc%3A1370025577147/点击”}' ;屏幕截图:可通过屏幕获得

我不太确定这次点击失败的原因。据我所知,以这种方式使用 click 应该没问题。下面是堆栈跟踪的相关部分(从事情开始崩溃之前到结束)

line 283, in get_jscript_down 
    ele.click() 
  File "/usr/local/lib/python2.6/dist-packages/selenium/webdriver/remote/webelement.py", line 54, in click 
    self._execute(Command.CLICK_ELEMENT) 
  File "/usr/local/lib/python2.6/dist-packages/selenium/webdriver/remote/webelement.py", line 228, in _execute 
    return self._parent.execute(command, params) 
  File "/usr/local/lib/python2.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 165, in execute 
    self.error_handler.check_response(response) 
  File "/usr/local/lib/python2.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 158, in check_response 
    raise exception_class(message, screen, stacktrace) 

任何想法将不胜感激。我很困惑。

请您参考如下方法:

我在 this page 上单击“Privatperson”时遇到同样的错误.该按钮的 ID 为“btnSelectB2C”。我最终做的是在元素上使用提交:

driver.find_element(:id, 'btnSelectB2C').submit 

(这是 Ruby 代码,但我认为如果它适用于您的情况,它应该很容易适应。)