2017-08-25 4 views
0

Ich schrieb diesen Code, um einige Klicks zu simulieren, um Zitate von einer Google-Gelehrtenseite zu erhalten.selen (find_by_id) Methode funktioniert nicht innerhalb einer for-Schleife

def APAcite (papers): 
    gscholar= 'https://scholar.google.com/scholar?hl=en&q=' 
    cites = [] 
    for p in papers: 
     print(p) 
     address = gscholar + p 
     Nbrowser = webdriver.Chrome(chrome_p) 
     Nbrowser.get(address) 
     Nbrowser.find_element_by_link_text('Cite').click() 
     APA = Nbrowser.find_element_by_id('gs_cit1').click() 
     Bib = Nbrowser.find_element_by_link_text('BibTeX').click() 
     cit_pg = browser.find_element_by_css_selector('''body > pre''') 
     cites.append(cit_pg.text) 
     Nbrowser.close() 
    return cites 

Dann definiert ich eine Liste der Papiere

l = ['Sustainability and the measurement of wealth: further reflections'] 

aber wenn ich es laufen, bekomme ich folgende Fehlermeldung:

<ipython-input-309-4208af266f79> in APAcite(papers) 
     8   Nbrowser.get(address) 
     9   Nbrowser.find_element_by_link_text('Cite').click() 
---> 10   APA = Nbrowser.find_element_by_id('gs_cit1').click() 
    11   Bib = Nbrowser.find_element_by_link_text('BibTeX').click() 
    12   cit_pg = browser.find_element_by_css_selector('''body > pre''') 

. . .

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"gs_cit1"} 

Obwohl ich die Seite untersuchen und bekommen Sie sicher, dass diese ID id for selected element

Einen weiteren Punkt vorhanden ist, wenn ich den Code außerhalb der Funktion und ohne die for Schleife laufen, ich habe keine Fehler bekommen und es funktioniert gut!

Können Sie bitte dabei helfen.

Antwort

0

Direkt unter Codezeile hinzufügen

Nbrowser.implicitly_wait(20) 

Nach

Nbrowser.get(address) 

Grundsätzlich Sie zu schnell bewegen. Nach dem Klicken es einige Zeit für den Text versuchen zu erscheinen und Sie nimmt die ID zu finden, die nicht da ist (noch!)

I unten Ausgabe erhalten, nachdem der Code

Sustainability and the measurement of wealth: further reflections ['@article{arrow2013sustainability,\n title={Sustainability and the measurement of wealth: further reflections},\n author={Arrow, Kenneth J and Dasgupta, Partha and Goulder, Lawrence H and Mumford, Kevin J and Oleson, Kirsten},\n journal={Environment and Development Economics},\n volume={18},\n number={4},\n pages={504--516},\n year={2013},\n publisher={Cambridge University Press}\n}']

+0

Dank viel Festsetzung .. . Lief wie am Schnürchen! –

+0

Verwenden Sie keine implizite Wartezeit. Es ist eine schlechte Übung. Stattdessen fügen Sie eine explizite Wartezeit hinzu, z. warten Sie, bis das Element anklickbar ist, und klicken Sie dann darauf, und es wird funktionieren. – JeffC

Verwandte Themen