Python-No such file or directory getAttribute.js

后端 未结 3 394
甜味超标
甜味超标 2021-01-07 14:12

I had a Python selenium program working a week or so ago. Now selenium fails on the import:

from selenium import webdriver

The IDLE ouput:<

相关标签:
3条回答
  • 2021-01-07 14:43

    you have to reinstall the selenium- Windows version from here https://pypi.org/project/selenium/#files

    Seems that the installation was broken. If you want to install from the repo, you need to follow the steps here first in order to build the .js files you need: https://github.com/SeleniumHQ/selenium/wiki/Python-Bindings#development

    0 讨论(0)
  • 2021-01-07 14:49

    Your webdriver installation files are either corrupted or missing. Reinstall/upgrade the webdriver eggs.

    FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Mike\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\selenium\\webdriver\\remote\\getAttribute.js'
    

    Try this:

    pip install selenium --upgrade
    
    0 讨论(0)
  • 2021-01-07 14:57

    The error does gives us some hint on whats wrong happening as follows :

    FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Mike\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\selenium\\webdriver\\remote\\getAttribute.js'
    

    Which essentially means getAttribute.js wasn't found in it's intended location.

    getAttribute.js

    getAttribute.js file internally works with the errors and other critical JavaScript functions as below :

    • element not selectable
    • element not visible
    • invalid cookie domain
    • invalid element coordinates
    • invalid element state
    • invalid selector
    • invalid selector
    • parseInt()
    • push()
    • indexOf()
    • toUpperCase()
    • execScript()
    • etc

    A typical getAttribute.js file looks like :

    function(){return function(){var d=this;function f(a){return"string"==typeof a};function h(a,b){this.code=a;this.a=l[a]||m;this.message=b||"";a=this.a.replace(/((?:^|\s+)[a-z])/g,function(a){return a.toUpperCase().replace(/^[\s\xa0]+/g,"")});b=a.length-5;if(0>b||a.indexOf("Error",b)!=b)a+="Error";this.name=a;a=Error(this.message);a.name=this.name;this.stack=a.stack||""}
    (function(){var a=Error;function b(){}b.prototype=a.prototype;h.b=a.prototype;h.prototype=new b;h.prototype.constructor=h;h.a=function(b,c,g){for(var e=Array(arguments.length-2),k=2;k<arguments.length;k++)e[k-2]=arguments[k];return a.prototype[c].apply(b,e)}})();var m="unknown error",l={15:"element not selectable",11:"element not visible"};l[31]=m;l[30]=m;l[24]="invalid cookie domain";l[29]="invalid element coordinates";l[12]="invalid element state";l[32]="invalid selector";l[51]="invalid selector";
    l[52]="invalid selector";l[17]="javascript error";l[405]="unsupported operation";l[34]="move target out of bounds";l[27]="no such alert";l[7]="no such element";l[8]="no such frame";l[23]="no such window";l[28]="script timeout";l[33]="session not created";l[10]="stale element reference";l[21]="timeout";l[25]="unable to set cookie";l[26]="unexpected alert open";l[13]=m;l[9]="unknown command";h.prototype.toString=function(){return this.name+": "+this.message};var n;a:{var p=d.navigator;if(p){var q=p.userAgent;if(q){n=q;break a}}n=""}function r(a){return-1!=n.indexOf(a)};function t(a,b){for(var e=a.length,c=f(a)?a.split(""):a,g=0;g<e;g++)g in c&&b.call(void 0,c[g],g,a)};function v(){return r("iPhone")&&!r("iPod")&&!r("iPad")};function w(){return(r("Chrome")||r("CriOS"))&&!r("Edge")};var x=r("Opera"),y=r("Trident")||r("MSIE"),z=r("Edge"),A=r("Gecko")&&!(-1!=n.toLowerCase().indexOf("webkit")&&!r("Edge"))&&!(r("Trident")||r("MSIE"))&&!r("Edge"),aa=-1!=n.toLowerCase().indexOf("webkit")&&!r("Edge");function B(){var a=d.document;return a?a.documentMode:void 0}var C;
    a:{var D="",E=function(){var a=n;if(A)return/rv\:([^\);]+)(\)|;)/.exec(a);if(z)return/Edge\/([\d\.]+)/.exec(a);if(y)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(aa)return/WebKit\/(\S+)/.exec(a);if(x)return/(?:Version)[ \/]?(\S+)/.exec(a)}();E&&(D=E?E[1]:"");if(y){var F=B();if(null!=F&&F>parseFloat(D)){C=String(F);break a}}C=D}var G;var H=d.document;G=H&&y?B()||("CSS1Compat"==H.compatMode?parseInt(C,10):5):void 0;var ba=r("Firefox"),ca=v()||r("iPod"),da=r("iPad"),I=r("Android")&&!(w()||r("Firefox")||r("Opera")||r("Silk")),ea=w(),J=r("Safari")&&!(w()||r("Coast")||r("Opera")||r("Edge")||r("Silk")||r("Android"))&&!(v()||r("iPad")||r("iPod"));function K(a){return(a=a.exec(n))?a[1]:""}(function(){if(ba)return K(/Firefox\/([0-9.]+)/);if(y||z||x)return C;if(ea)return v()||r("iPad")||r("iPod")?K(/CriOS\/([0-9.]+)/):K(/Chrome\/([0-9.]+)/);if(J&&!(v()||r("iPad")||r("iPod")))return K(/Version\/([0-9.]+)/);if(ca||da){var a=/Version\/(\S+).*Mobile\/(\S+)/.exec(n);if(a)return a[1]+"."+a[2]}else if(I)return(a=K(/Android\s+([0-9.]+)/))?a:K(/Version\/([0-9.]+)/);return""})();var L,M=function(){if(!A)return!1;var a=d.Components;if(!a)return!1;try{if(!a.classes)return!1}catch(g){return!1}var b=a.classes,a=a.interfaces,e=b["@mozilla.org/xpcom/version-comparator;1"].getService(a.nsIVersionComparator),c=b["@mozilla.org/xre/app-info;1"].getService(a.nsIXULAppInfo).version;L=function(a){e.compare(c,""+a)};return!0}(),N=y&&!(8<=Number(G)),fa=y&&!(9<=Number(G));I&&M&&L(2.3);I&&M&&L(4);J&&M&&L(6);var ga={SCRIPT:1,STYLE:1,HEAD:1,IFRAME:1,OBJECT:1},O={IMG:" ",BR:"\n"};function P(a,b,e){if(!(a.nodeName in ga))if(3==a.nodeType)e?b.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g,"")):b.push(a.nodeValue);else if(a.nodeName in O)b.push(O[a.nodeName]);else for(a=a.firstChild;a;)P(a,b,e),a=a.nextSibling};function Q(a,b){b=b.toLowerCase();return"style"==b?ha(a.style.cssText):N&&"value"==b&&R(a,"INPUT")?a.value:fa&&!0===a[b]?String(a.getAttribute(b)):(a=a.getAttributeNode(b))&&a.specified?a.value:null}var ia=/[;]+(?=(?:(?:[^"]*"){2})*[^"]*$)(?=(?:(?:[^']*'){2})*[^']*$)(?=(?:[^()]*\([^()]*\))*[^()]*$)/;
    function ha(a){var b=[];t(a.split(ia),function(a){var c=a.indexOf(":");0<c&&(a=[a.slice(0,c),a.slice(c+1)],2==a.length&&b.push(a[0].toLowerCase(),":",a[1],";"))});b=b.join("");return b=";"==b.charAt(b.length-1)?b:b+";"}function S(a,b){N&&"value"==b&&R(a,"OPTION")&&null===Q(a,"value")?(b=[],P(a,b,!1),a=b.join("")):a=a[b];return a}function R(a,b){b&&"string"!==typeof b&&(b=b.toString());return!!a&&1==a.nodeType&&(!b||a.tagName.toUpperCase()==b)}
    function T(a){return R(a,"OPTION")?!0:R(a,"INPUT")?(a=a.type.toLowerCase(),"checkbox"==a||"radio"==a):!1};var ja={"class":"className",readonly:"readOnly"},U="async autofocus autoplay checked compact complete controls declare defaultchecked defaultselected defer disabled draggable ended formnovalidate hidden indeterminate iscontenteditable ismap itemscope loop multiple muted nohref noresize noshade novalidate nowrap open paused pubdate readonly required reversed scoped seamless seeking selected spellcheck truespeed willvalidate".split(" ");function V(a,b){var e=null,c=b.toLowerCase();if("style"==c)return(e=a.style)&&!f(e)&&(e=e.cssText),e;if(("selected"==c||"checked"==c)&&T(a)){if(!T(a))throw new h(15,"Element is not selectable");b="selected";e=a.type&&a.type.toLowerCase();if("checkbox"==e||"radio"==e)b="checked";return S(a,b)?"true":null}var g=R(a,"A");if(R(a,"IMG")&&"src"==c||g&&"href"==c)return(e=Q(a,c))&&(e=S(a,c)),e;if("spellcheck"==c){e=Q(a,c);if(null!==e){if("false"==e.toLowerCase())return"false";if("true"==e.toLowerCase())return"true"}return S(a,
    c)+""}g=ja[b]||b;a:if(f(U))c=f(c)&&1==c.length?U.indexOf(c,0):-1;else{for(var u=0;u<U.length;u++)if(u in U&&U[u]===c){c=u;break a}c=-1}if(0<=c)return(e=null!==Q(a,b)||S(a,g))?"true":null;try{var k=S(a,g)}catch(ka){}(c=null==k)||(c=typeof k,c="object"==c&&null!=k||"function"==c);c?e=Q(a,b):e=k;return null!=e?e.toString():null}var W=["_"],X=d;W[0]in X||!X.execScript||X.execScript("var "+W[0]);
    for(var Y;W.length&&(Y=W.shift());){var Z;if(Z=!W.length)Z=void 0!==V;Z?X[Y]=V:X[Y]&&X[Y]!==Object.prototype[Y]?X=X[Y]:X=X[Y]={}};; return this._.apply(null,arguments);}.apply({navigator:typeof window!='undefined'?window.navigator:null,document:typeof window!='undefined'?window.document:null}, arguments);}
    

    Error Reason :

    Incase the getAttribute.js file doesn't gets downloaded properly Selenium and webdriver modules may not work properly. The issue can arise if the Selenium Client encounters any error during its transmission or storage.

    Selenium Team is currently working on the issue SeleniumHQ/selenium/5378 to generate the binary checksum of the Downloaded Selenium Client which will help you to avoid encountering errors which may have been introduced during its transmission or storage.

    Solution

    Till then a solution will be to :

    • Check if Python is properly installed

      C:\Users\username>python
      Python 3.9.0 (v3.9.0:69c0db5, Jan 31 2018, 17:54:52) [MSC v.1900 32 bit (Intel)]
       on win32
      Type "help", "copyright", "credits" or "license" for more information.
      >>>
      
    • Ensure pip is working properly

      C:\Users\username>pip
      
      Usage:
        pip <command> [options]
      
      Commands:
        install                     Install packages.
        download                    Download packages.
        uninstall                   Uninstall packages.
        freeze                      Output installed packages in requirements format.
        list                        List installed packages.
        show                        Show information about installed packages.
        check                       Verify installed packages have compatible dependencies.
        search                      Search PyPI for packages.
        wheel                       Build wheels from your requirements.
        hash                        Compute hashes of package archives.
        completion                  A helper command used for command completion.
        help                        Show help for commands.
      
      General Options:
        -h, --help                  Show help.
        --isolated                  Run pip in an isolated mode, ignoring environment variables and user configuration.
        -v, --verbose               Give more output. Option is additive, and can be used up to 3 times.
        -V, --version               Show version and exit.
        -q, --quiet                 Give less output. Option is additive, and can be used up to 3 times (corresponding to WARNING, ERROR, and CRITICAL logging levels).
        --log <path>                Path to a verbose appending log.
        --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
        --retries <retries>         Maximum number of retries each connection should attempt (default 5 times).
        --timeout <sec>             Set the socket timeout (default 15 seconds).
        --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.
        --trusted-host <hostname>   Mark this host as trusted, even though it does not have valid or any HTTPS.
        --cert <path>               Path to alternate CA bundle.
        --client-cert <path>        Path to SSL client certificate, a single file containing the private key and the certificate in PEM format.
        --cache-dir <dir>           Store the cache data in <dir>.
        --no-cache-dir              Disable the cache.
        --disable-pip-version-check
                        Don't periodically check PyPI to determine
                        whether a new version of pip is available for
                    download. Implied with --no-index.
      
    • Uninstall Selenium completely through pip

      C:\Users\username>pip uninstall selenium
      Uninstalling selenium-3.4.2:
        c:\python\lib\site-packages\selenium-3.4.2.dist-info\description.rst
        c:\python\lib\site-packages\selenium-3.4.2.dist-info\installer
        c:\python\lib\site-packages\selenium-3.4.2.dist-info\metadata
        c:\python\lib\site-packages\selenium-3.4.2.dist-info\metadata.json
        c:\python\lib\site-packages\selenium-3.4.2.dist-info\record
        c:\python\lib\site-packages\selenium-3.4.2.dist-info\top_level.txt
        c:\python\lib\site-packages\selenium-3.4.2.dist-info\wheel
        c:\python\lib\site-packages\selenium\__init__.py
        c:\python\lib\site-packages\selenium\__pycache__\__init__.cpython-36.pyc
        c:\python\lib\site-packages\selenium\common\__init__.py
        .....
        .....
        .....  
        c:\python\lib\site-packages\selenium\webdriver\support\events.py
        c:\python\lib\site-packages\selenium\webdriver\support\expected_conditions.py
        c:\python\lib\site-packages\selenium\webdriver\support\select.py
        c:\python\lib\site-packages\selenium\webdriver\support\ui.py
        c:\python\lib\site-packages\selenium\webdriver\support\wait.py
        c:\python\selenium\webdriver\firefox\amd64\x_ignore_nofocus.so
        c:\python\selenium\webdriver\firefox\x86\x_ignore_nofocus.so
        c:\python\selenium\webdriver\remote\getattribute.js
        c:\python\selenium\webdriver\remote\isdisplayed.js
      Proceed (y/n)? y
        Successfully uninstalled selenium-3.4.2
      
    • Install the latest Selenium through pip

      C:\Users\username>pip install -U selenium
      Collecting selenium
        Downloading selenium-3.9.0-py2.py3-none-any.whl (931kB)
          100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 942kB 322kB/s
      Installing collected packages: selenium
      Successfully installed selenium-3.9.0
      
    • Confirm that Selenium is installed

      C:\Users\AtechM_03>pip freeze
      selenium==3.9.0
      
    • Open an IDE (e.g Eclipse, PyCharm) and write a simple program as follows :

      from selenium import webdriver
      
      driver = webdriver.Firefox(executable_path="C:\\path\\to\\geckodriver.exe")
      driver.get('https://stackoverflow.com')
      
    0 讨论(0)
提交回复
热议问题