Inject Javascript into selenium Python -> converted_args})['value']



我试图将一些JavaScript代码注入我的Chrome Selenium浏览器。JavaScript包含一个仅有效的令牌,因此JavaScript只能执行一次。要注入我使用的JavaScript:

driver.execute_script(toinject)

在其中包含此JavaScript:

javascript:(function(){ var f = document.createElement("form"); f.setAttribute("id","destroyer"); f.setAttribute("method","post"); f.setAttribute("action","http://www.adidas.ch/on/demandware.store/Sites-adidas-CH-Site/default/Cart-MiniAddProduct?clientId=c1f3632f-6d3a-43f4-9987-9de920731dcb"); var masterPid = document.createElement("input"); masterPid.setAttribute("type","hidden"); masterPid.setAttribute("name","masterPid"); masterPid.setAttribute("value","BY9913"); var pid = document.createElement("input"); pid.setAttribute("type","hidden"); pid.setAttribute("name","pid"); pid.setAttribute("value","BY9913_620"); var ajaxOption = document.createElement("input"); ajaxOption.setAttribute("type","hidden"); ajaxOption.setAttribute("name","ajax"); ajaxOption.setAttribute("value","true"); var responseOption = document.createElement("input"); responseOption.setAttribute("type","hidden"); responseOption.setAttribute("name","layer"); responseOption.setAttribute("value","Add To Bag overlay"); var quantity = document.createElement("input"); quantity.setAttribute("type","hidden"); quantity.setAttribute("name","Quantity"); quantity.setAttribute("value","1"); var sessionSelectedStoreID = document.createElement("input"); sessionSelectedStoreID.setAttribute("type","hidden"); sessionSelectedStoreID.setAttribute("name","sessionSelectedStoreID"); sessionSelectedStoreID.setAttribute("value","null"); var captchaToken = document.createElement("input"); captchaToken.setAttribute("type","hidden"); captchaToken.setAttribute("name","g-recaptcha-response"); captchaToken.setAttribute("value","03AMPJSYXHk0axYBy3sJEKk7pSbaubS9c0Du3y87zzid05zpMpMvyzWdqRQmbPqVM2cxd9j3RNjMyX7x3_NOmo7NhlJD0YjyZlwG13AIGwHZ9E0IYqX1YyxAO162pXPxZboq4M47CA9Sf2BDdwIPjHsPgOX3ELuFeWR38Su0jsrrJoQ1ti49wllmsM3EbfSM4PXoudbary0NmXrSC2qpkQ0H3SkIbW3cfiwnDPm6s5bWlznjFAwtuDBbWGm7FC2TizgPr_nVRW4hh7E9F_lEkTWS-BIQFsan2huh7z-eK1Q1WEYUC9ReDg87GoKPF0CAz3yfanh_hbfHr7yMVSxqkQznGXmNQ-tj8gfa9PVwKM5BUT_-ofQliUBgEWePQN31cStqRxDuUesGyB"); f.appendChild(captchaToken); var captchaDuplicate = document.createElement("input"); captchaDuplicate.setAttribute("type","hidden"); captchaDuplicate.setAttribute("name","x-PrdRt"); captchaDuplicate.setAttribute("value","03AMPJSYXHk0axYBy3sJEKk7pSbaubS9c0Du3y87zzid05zpMpMvyzWdqRQmbPqVM2cxd9j3RNjMyX7x3_NOmo7NhlJD0YjyZlwG13AIGwHZ9E0IYqX1YyxAO162pXPxZboq4M47CA9Sf2BDdwIPjHsPgOX3ELuFeWR38Su0jsrrJoQ1ti49wllmsM3EbfSM4PXoudbary0NmXrSC2qpkQ0H3SkIbW3cfiwnDPm6s5bWlznjFAwtuDBbWGm7FC2TizgPr_nVRW4hh7E9F_lEkTWS-BIQFsan2huh7z-eK1Q1WEYUC9ReDg87GoKPF0CAz3yfanh_hbfHr7yMVSxqkQznGXmNQ-tj8gfa9PVwKM5BUT_-ofQliUBgEWePQN31cStqRxDuUesGyB"); f.appendChild(captchaDuplicate); var s = document.createElement("input"); s.setAttribute("type","submit"); s.setAttribute("value","Submit"); f.appendChild(masterPid); f.appendChild(pid); f.appendChild(ajaxOption); f.appendChild(responseOption); f.appendChild(quantity); f.appendChild(sessionSelectedStoreID); f.appendChild(s); document.getElementsByTagName("body")[0].appendChild(f); })(); document.getElementById(document.querySelector("[id^='destroyer']").id).submit();

它很长,但是我可以肯定的是正确,因为如果我使用JavaScript测试仪运行它,它可以正常工作。此后发生的事情是,JavaScript似乎被执行两次,使令牌无效。我收到以下错误:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "testin.py", line 74, in startbot
    openseission()
  File "testin.py", line 183, in openseission
    driver.execute_script(toinject)
  File "/Users/____/Desktop/going_headless/chaptcha/flask/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 546, in execute_script
    'args': converted_args})['value']
  File "/Users/____/Desktop/going_headless/chaptcha/flask/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 311, in execute
    self.error_handler.check_response(response)
  File "/Users/___/Desktop/going_headless/chaptcha/flask/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 237, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: call function result missing 'value'
  (Session info: chrome=65.0.3305.0)
  (Driver info: chromedriver=2.34.522932 (4140ab217e1ca1bec0c4b4d1b148f3761eb3a03e),platform=Mac OS X 10.12.6 x86_64)

如何避免这种情况?在过去的3个小时中,我没有发现任何遇到相同问题的人。我不介意以另一种方式注入JavaScript,但我不知道。预先感谢

您的跟踪表明您正在使用Chrome 65(您在beta通道上吗?)w/chromedriver 2.34。我不认为Chrome 65可以用该版本的Chromedriver驱动。您可能想降级铬(例如,我相信目前为63的稳定版本)。

最新更新