selenium(find_by_id)方法在for循环中不起作用

时间:2017-08-25 19:50:32

标签: python-3.x selenium

我编写了这段代码来模拟一些点击以获取Google学者页面的引文。

 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 

然后我定义了一份论文清单

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

但是当我运行它时,我收到以下错误:

<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"}

虽然我检查页面并确保此ID存在 id for selected element

另一点,当我在函数外运行代码并且没有for循环时,我没有收到任何错误,而且工作正常!

你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

只需添加以下代码行

即可
Nbrowser.implicitly_wait(20)

之后

Nbrowser.get(address)

基本上你移动得太快了。单击后,文本显示需要一些时间,并且您尝试找到不存在的ID(尚未!)

修复代码后,我得到了以下输出

  

可持续性和财富衡量:进一步的反思   [&#39; @article {arrow2013sustainability,\ n title = {可持续性与衡量财富:进一步思考},\ n作者= {Arrow,Kenneth J和Dasgupta,Partha和Goulder,Lawrence H和Mumford,Kevin J和Oleson,Kirsten},\ n journal = {环境与发展经济学},\ n volume = {18},\ n number = {4},\ n pages = {504--516},\ n year = {2013} ,\ n publisher = {剑桥大学出版社} \ n}&#39;]